2

在我的应用程序中,我有一个 Activity,其中包含一个 Fragment,其中包含一个带有各种 EditTexts 的 ListView,如下所示:

活动 -> 片段 -> 列表视图 -> 编辑文本

当点击 EditText 时,会显示软键盘并发生以下两种情况之一:

  • 如果 Activity 尚未失去焦点(例如,通过访问 Android 主屏幕),则整个 Activity 会略微向上滑动,以便 EditText 不会被键盘遮挡。

  • 如果 Activity 在某些时候失去焦点(再次,例如访问 Android 主屏幕),ListView 会在键盘上方滚动 EditText(活动保持静止),但 EditText 失去焦点!

这些结果都不是理想的。理想情况下,我总是希望 ListView 在键盘上方滚动 EditText 而不会使 EditText 失去焦点。谁能指出我正确的方向和/或解释为什么我现在看到同一动作的两种不同行为?

编辑:作为参考,我正在为 Android 4.2 构建并在 Nexus 7 平板电脑上进行测试。

4

2 回答 2

1

问题是,当您在 ListView 行中使用 EditText 时,您的 ListView 可能会被重绘以为键盘腾出空间。并且当您的 ListView 被重绘时,系统不会记住光标之前的位置。

如果您在 ScrollView 而不是 ListView 中使用 LinearLayout,则似乎不会发生相同的问题。这听起来很愚蠢,但它确实有效。

于 2013-01-12T14:55:57.320 回答
1

最近我也遇到了这个问题,我通过在 AndroidManifest.xml 中添加android:windowSoftInputMode="adjustPan"来解决这个问题。这不会导致 listview 重绘,所以edittext不会失去焦点。

于 2016-03-29T09:46:06.580 回答