将ScrollView从自动滚动停止到EditText

Fra*_*gle 42 android scrollview autoscroll android-edittext

如果没有我找到的出色解决方案,这似乎是一个常见问题.目标是停止ScrollView从自动滚动到EditText具有焦点的(或任何视图).

你有一堆视图(Buttons,TextViews等)ScrollView,其中一个是EditText.点击后说出一个按钮ScrollView,ScrollView向下滚动到EditText(关闭屏幕).这是不可取的,因为您不希望其他元素滚动离开屏幕.

现在,我可以通过在屏幕中首先显示其他可聚焦元素来阻止这种情况发生ScrollView.但是,一般问题仍然存在.用户手动向下滚动EditText,输入一些数字,然后向上滚动到顶部(EditText现在关闭屏幕),他们点击一个按钮ScrollView,猜猜是什么?在ScrollView下降到织补滚动EditText.

我正在考虑扩展ScrollView和覆盖那里的一些方法findFocusableViewInBounds,但我有一种感觉,我只会让自己陷入更多麻烦.

如果可以的话请帮忙.

我已经玩了很多东西,例如EditText在我的顶部有一个0高度ScrollView,将Next Focusable元素属性添加到其他项目中ScrollView等等.我想一个"hack"可能会让EditText虚拟或者失去焦点.手动键盘隐藏或东西.

tho*_*8wp 36

经过一段时间的努力解决这个问题之后,我找到了一个似乎没有太难看的解决方案.首先,确保所有ViewGroup(直接)包含你的EditTextdescendantFocusability设置为"在后代之前",focusable设置为"true"并focusableInTouchMode设置为"true".这不是它ScrollView本身,而是你所拥有各种视图的布局.接下来添加一个onTouchListenerScrollView可以从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;
    }
});
Run Code Online (Sandbox Code Playgroud)

告诉我,如果这不能解决它.应该发生的是布局获得焦点而不是焦点EditText,因此不应该进行滚动.

  • 如果仍然无效,请尝试此解决方案http://stackoverflow.com/questions/8100831/stop-scrollview-from-setting-focus-on-edittext (3认同)

小智 22

只需在linearlayout顶部创建一个空视图

<View android:layout_width="fill_parent" android:id="@+id/focus_view" android:layout_height="0dp" android:focusable="true" android:focusableInTouchMode="true"><requestFocus/></View>
Run Code Online (Sandbox Code Playgroud)

单线解决了这个问题


paw*_*eba 9

我有同样的问题.有一个技巧我用来处理这个问题:

public void onClick(View v) {
    button.requestFocusFromTouch(); //prevents from loosing focus and scrolling view down
    ....
}
Run Code Online (Sandbox Code Playgroud)


Cor*_*lla 8

问题不在于java代码,而是在清单代码上.

在AndroidManifest.xml中为Activity添加一个属性:

        <activity android:name=".MyActivity" android:windowSoftInputMode="adjustPan"> </activity>
Run Code Online (Sandbox Code Playgroud)


小智 7

通过添加2个参数:

android:focusable="true"
android:focusableInTouchMode="true"
Run Code Online (Sandbox Code Playgroud)

那里有Main布局.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background"
    android:focusable="true"
    android:focusableInTouchMode="true">
Run Code Online (Sandbox Code Playgroud)

EditText将不会自动聚焦.