如何在屏幕旋转时更改键盘IMEaction

时间:2019-03-07 13:22:04

标签: android keyboard rotation android-lifecycle onconfigurationchanged

每当屏幕旋转时,我都需要更改键盘输入法。 如果设备处于横向,则我需要将动作设置为IME_ACTION_NEXT,如果设备旋转了-在显示键盘的同时-我需要更改动作以接受退货。

我尝试过创建另一个版本的视图作为landscapeview,但这并没有改变键盘。 我也尝试过在“ onConfigurationChanged”中更改ime动作,但在这种情况下也不会对键盘进行任何更改。

反正有强迫键盘在旋转时刷新吗?

1 个答案:

答案 0 :(得分:1)

仅当您通过清单中的android:configChanges =“ orientation | screenSize”告诉它时,才会调用

OnConfigurationChanged。你有那个吗?否则,您的“活动”不会在定向中被调用,它实际上会终止并重新启动。

一种替代方法是对横向和纵向使用单独的布局。他们可以指定不同的设置,但是您必须维护2个文件。

一种可能是将单个布局中的值设置为@ string / keyboardAction,并在您的strings.xml文件中定义该值,然后创建一个景观strings.xml文件以覆盖它。那应该可以,但是我从来没有尝试过使用imeOptions字符串来做到这一点,所以我不能完全保证。但这是两种方法中最干净的。

编辑:

只需重新读取-这是已经存在的键盘,如果在旋转后打开键盘,它可以工作吗?这实际上是有道理的-现在我们深入了解键盘API。实际导致键盘重新加载该字段的原因在各个键盘之间会有所不同,因此确切的答案很难。肯定会发生的事情是,如果onStartInputView在旋转时调用了新的会话(第二个参数为true)。如果使用false调用它,则可能会重置标签,也可能不会重置标签,但是应该重置。我不认为它完全可以轮换使用。

无论如何,尝试旋转时调用inputMethodManager.restartInput。当您更改inputType时,EditText会调用该函数,键盘应用程序应该然后重新初始化视图。