似乎是一个常见问题,但我没有找到很好的解决方案。目标是停止 ScrollView
从自动滚动到 EditText
(或任何与此相关的观点)。
您在 Button
中有一堆 View (TextView
s、ScrollView
s 等) ,其中之一是 EditText
.单击 ScrollView
中的按钮后, ScrollView
向下滚动到 EditText
(它的屏幕外)。这是不希望的,因为您不希望将其他元素滚动到屏幕之外。
现在我可以通过在 ScrollView
中添加其他可聚焦元素来阻止屏幕首次显示时发生这种情况。 .但是,普遍的问题仍然存在。用户手动向下滚动到 EditText
,输入一些数字,然后向上滚动到顶部(EditText
现在关闭屏幕),他们单击 ScrollView
中的按钮, 你猜怎么着? ScrollView
向下滚动到该死的 EditText
.
我正在考虑扩展 ScrollView
并覆盖那里的一些方法,如 findFocusableViewInBounds
,但我有一种感觉,我只会让自己陷入更多麻烦。
如果可以,请提供帮助。
我玩过诸如高度为 0 的事情 EditText
在我的 ScrollView
顶部,将 Next Focusable 元素属性添加到 ScrollView
中的其他项目等。我想一个“黑客”可能是获得 EditText
当虚拟或手动键盘被隐藏或其他东西时失去焦点。
最佳答案
在解决这个问题很长一段时间后,我找到了一个似乎可行而又不会太难看的解决方案。首先,确保 ViewGroup
(直接)包含您的 EditText
的 descendantFocusability
设置为“Before Descendants”,focusable
设置为“true”并且 focusableInTouchMode
设置为“true”。这将不是 ScrollView
本身,而是您拥有各种 View 的内部布局。接下来添加一个 onTouchListener
到您的 ScrollView
中,当它被触摸时,它会从 EditText
中移除焦点,如下所示:
ScrollView scroll = (ScrollView)findViewById(R.id.scrollView1);
scroll.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (myEditText.hasFocus()) {
myEditText.clearFocus();
}
return false;
}
});
如果这不能解决问题,请告诉我。应该发生的是布局而不是 EditText
获得焦点,因此不应发生滚动。
关于android - 停止 ScrollView 自动滚动到 EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6176391/