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 服务