我有一个简单的输入表格;这是一个垂直的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
将不再困扰您。