Android Nougat 中的 ScrollView 在输入 EditText 时一直滚动到顶部,但在 Lollipop 中有效

Posted

技术标签:

【中文标题】Android Nougat 中的 ScrollView 在输入 EditText 时一直滚动到顶部,但在 Lollipop 中有效【英文标题】:ScrollView in Android Nougat keeps scrolling to top when typing in EditText but works in Lollipop 【发布时间】:2020-10-15 16:40:57 【问题描述】:

android ScrollView 布局只能包含一个子元素,因此在放入 ScrollView 元素之前,必须将多个子元素包裹在另一个布局元素中。

我有一个主 FrameView 包装一个 ScrollView 包装另一个 FrameView,里面有许多 EditText 元素。

布局看起来像这样:

<FrameLayout>
    <ScrollView>
        <FrameLayout>
            </EditText>
            </EditText>
        </FrameLayout>
    </ScrollView>
</FrameLayout>

这一切都是以编程方式完成的,而且效果很好。当软键盘出现时,最外层的框架布局和滚动视图被调整大小,内容在缩小的区域内完美滚动。当软键盘弹出时,它甚至会滚动到选定的编辑文本元素。

问题是,即使选定的编辑文本在软键盘上方可见,每次按下键时滚动视图都会自动滚动到顶部。我必须再次向下滚动到重点编辑文本,但它会随着软键盘的每次击键再次滚动到顶部。

我只有三个测试设备,一个牛轧糖和两个棒棒糖,这个问题只出现在牛轧糖上

是什么导致了这种奇怪的行为?

【问题讨论】:

【参考方案1】:

解决此问题的一种方法是在我们更新 editText 中的值之前禁用滚动视图

 scrollview.setEnabled(false) 

然后在更新editText后启用滚动视图

scrollview.setEnabled(true)

【讨论】:

这种方法的问题是高度大于软键盘上方可见区域的多行 EditText 将保持隐藏状态。因此,必须允许滚动视图滚动才能进行此类调整。有没有办法限制滚动? 另外,它不再可能以这种方式禁用滚动视图。

以上是关于Android Nougat 中的 ScrollView 在输入 EditText 时一直滚动到顶部,但在 Lollipop 中有效的主要内容,如果未能解决你的问题,请参考以下文章

EditText中的标点符号 - Android Nougat

Android Nougat 中的 ScrollView 在输入 EditText 时一直滚动到顶部,但在 Lollipop 中有效

Android nougat(超过7.0.0)的BLE(蓝牙低功耗)无法读取数据

Android 7.0 (Nougat) 打盹模式停止 Web 服务

仅从 Android 7.0 (Nougat) 开始支持默认接口方法

Nougat 7 不支持 Android 相机裁剪