【问题标题】:Focus randomly jumps when scrolling滚动时焦点随机跳跃
【发布时间】:2011-07-13 13:00:32
【问题描述】:

我有一个活动,其中有许多 EditText 控件和复选框。默认情况下,大多数EditTexts 被禁用。

当我打开 Activity 时,一些随机的 EditText 控件获得焦点(围绕它的一个框架),如果您点击它,即使 EditText 被禁用,屏幕上的键盘也会出现,并且当您按屏幕上的键。

另外,我的整个布局都包含在 ScrollView 中。当您滚动时,一些随机的EditTexts 会获得焦点。它可以是最低可见的,也可以是最高可见的,或者有时在中间,有时在可见区域之外。

由于布局的随机元素获得焦点,因此当您打开 Activity 时,它会随机向下滚动,这很烦人。

我猜这是 Android 的错误,但有解决方法吗?

Stop EditText from gaining focus at Activity startup 仅使用 1 个 EditText 处理这种情况,您可以告诉它失去焦点,以便虚拟元素可以获得它。在我的情况下,虚拟元素在 onResume 或 onCreate 中都没有获得焦点,android:focusable="true" android:focusableInTouchMode="true"

我应该检查所有的 EditText 控件(其中有 12 个)并告诉它们失去焦点吗?滚动怎么办,因为它似乎焦点随机跳跃。

【问题讨论】:

  • 刚刚尝试在布局中的每个 EditText 元素上调用 clearFocus() 和 setSelected(false)。这没有帮助。仍然有一些随机的获得焦点。
  • 在对此进行一些测试后发现它并不总是随机获得焦点,而是与触摸点具有相同 y 位置的 EditText 元素。您不必完全触摸元素本身,而是触摸它的右侧或左侧,然后开始滚动。一段时间后,EditText 很有可能获得焦点,即使它被禁用(不可编辑)

标签: android android-activity focus android-edittext


【解决方案1】:

因为在ScrollView中实现了fling方法—— 覆盖findFocus() 就足够了,这样它将返回this 防止焦点在滚动时跳来跳去。

@Override
public View findFocus() {
    return this;
}

【讨论】:

  • 不继承 ScrollView 怎么办?
  • 不可能。你必须继承ScrollView
  • 子类化 ScrollView 对我的问题不起作用。你能帮我吗?我刚刚在stackoverflow.com/questions/21240063/… 发布了我的问题
【解决方案2】:

随机聚焦 EditText 的不是滚动。这是当滚动视图处理一个投掷事件时。如果你覆盖了 fling 方法,则不会有任何随机的焦点变化。

然后,如果您想要返回投掷功能,则需要编写自己的投掷方法。这里有你可以复制的代码:

Smooth scrolling in Android

【讨论】:

  • 我也面临着同样的焦点跳跃问题。但我无法覆盖 Android 代码中的平滑滚动。你能否给我更多的细节来解决这个问题。提前致谢。
猜你喜欢
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2017-07-01
  • 2014-03-26
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多