我有一个简单的输入表格;这是一个垂直的LinearLayout,在ScrollView中带有EditTexts。

<ScrollView android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <LinearLayout android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">
            <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:padding="10dip"
                  android:gravity="center_vertical"
                  android:orientation="horizontal">
                  <TextView style="@style/Text"
                         android:text="Name"/>
                  <EditText style="@style/EditBox"/>
            </LinearLayout>
            <View style="@style/Divider"/>
            <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:padding="10dip"
                  android:gravity="center_vertical"
                  android:orientation="horizontal">
                  <TextView style="@style/Text"
                         android:text="Password"/>
                  <EditText style="@style/EditBox"/>
            </LinearLayout>
            ...
     </LinearLayout>
</ScrollView>

当用户滚动窗体时,它将自动将焦点移到可见的EditText上。
是否可以禁用这种行为,并始终将注意力集中在当前通过触摸选择的EditText上?

我了解这可能是一项功能,但是我需要将其禁用。

谢谢!

最佳答案

只是以为我会为此分享我的解决方案。即使其他答案的某些评论指出您无法覆盖此行为,但事实并非如此。重写onRequestFocusInDescendants()方法后,此行为就会停止。因此,只需创建您的ScrollView扩展即可:

public class NonFocusingScrollView extends ScrollView {

  public NonFocusingScrollView(Context context) {
    super(context);
  }

  public NonFocusingScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public NonFocusingScrollView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
    return true;
  }

}

这样就完成了。 ScrollView将不再困扰您。

10-07 19:34
查看更多