我有一个简单的输入表单;它是一个在 ScrollView 内带有 EditTexts 的垂直 LinearLayout。
<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
将不再干扰您的焦点。
关于android - ScrollView 禁用焦点移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5375838/