ScrollView中存在EditText,焦点变化引发自动滚动问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ScrollView中存在EditText,焦点变化引发自动滚动问题相关的知识,希望对你有一定的参考价值。

参考技术A 经常遇到ScrollView中,存在EditText,当页面滑到底部做一个更新组件的操作时,界面会自动上滑到EditText位置。是因为这个时候焦点被EditText占用,布局自动定位到了它身上。还好在csdn上看到了一片文章,找到了解决方案,原文地址如下

https://blog.csdn.net/xiao_sier/article/details/106992752

下面大概讲述下解决方案:

在ScrollView滚动时,让ScrollView自动获取到焦点

scrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);

        scrollView.setFocusable(true);

        scrollView.setFocusableInTouchMode(true);

        scrollView.setOnTouchListener((v, event) ->

            v.requestFocusFromTouch();

            return false;

        );

这样就会捕获焦点,阻止了页面的滑动,很好的解决了问题。

Android Soft Keyboard在重新打开时隐藏EditText

我正在开发一个需要屏幕固定和一个完整窗口的应用程序,所以我隐藏了导航栏等。

当活动打开并且EditText获得焦点时,软键盘将变为可见,它将把EditText移到它上面 - 很棒,没有问题。

当我关闭软键盘并通过单击所述EditText重新打开它时,会出现问题,软键盘现在将隐藏EditText。

关于如何解决这个问题的任何想法?我试过在ScrollView中包含整个布局,问题仍然存在。

正在使用的窗口标志:

 val flags = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_FULLSCREEN
        or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)

 window.decorView.systemUiVisibility = flags
 window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

在我的清单中,我使用:

android:windowSoftInputMode="stateHidden|adjustResize"

Initial display of Soft Keyboard

When Soft keyboard is dismissed and reopened

解决了。

我设法通过从EditText中删除输入类型来解决这个问题。

答案

我设法通过从EditText中删除输入类型来解决这个问题。

以上是关于ScrollView中存在EditText,焦点变化引发自动滚动问题的主要内容,如果未能解决你的问题,请参考以下文章

android EditText在获得焦点的时候下面的Tab被输入法顶上去了?

Android进入一个新页面,EditText失去焦点并禁止弹出键盘

Android Soft Keyboard在重新打开时隐藏EditText

Android设置EditText默认取消焦点

请求焦点后如何将edittext光标位置恢复为结束

关于 ScrollView 中嵌套 EditText,输入多行会使整体滚动的问题