android - ScrollView 禁用焦点移动

标签 android focus android-scrollview

我有一个简单的输入表单;它是一个在 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/

相关文章:

java - listItem 的缩放动画

Android ScrollView 隐藏布局中的顶部内容

java - 如何为整个 Activity 添加 ScrollView ?

android - 从 url android 下载 docx 文件

android - <expr> 预期,得到 '?'

css - IE 设置 :focus on lots of random elements

css - IE8 :focus causes issue - need to double click

Android系统应用DEVICE_POWER权限错误

java - 在数据绑定(bind)布局中使用子组件时,如何让子组件正确编译?

android - 如何在 Android 中使用滚动模式