在安卓9.0(API-28)中进入活动时键盘不会弹出

13

我希望在进入电子邮件登录界面时弹出设备键盘。

我在AndroidManifest.xml文件中声明了windowSoftInputMode"stateVisible"

<activity
        android:name=".activities.EmailLoginActivity"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"   
        android:windowSoftInputMode="stateVisible" />

我遵循了这个文档

结果:

在运行Android API 27及以下版本的设备上会显示键盘。

在运行Android API 28的设备上不会显示键盘。

这是Android Pie中的一个错误吗?

你有什么建议吗?

6个回答

26
在Android Pie(API 28)中,似乎不会自动设置EditText的请求焦点。因此,您必须在XML文件中或通过编程方式设置您的EditTextrequestFocusyour_layout.xml
<EditText
        android:id="@+id/et_email"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/_20sdp"
        android:inputType="textEmailAddress"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <requestFocus />
    </EditText>

your_activity.java

findViewById(R.id.et_email).requestFocus();

如果您正在从onResume()调用requestFocus(),则需要延迟调用,请参见https://dev59.com/mFTTa4cB1Zd3GeqPxv4M。 - Pig Dog Bay

1
我在Android 9.0上也遇到了这个问题。对于我而言,.requestFocus()没有起作用。
解决方案:
确保你的EditText实际上是可见的。我将EditText用作隐藏字段,在将宽度和高度从0设置为1dp后才显示出键盘。

1
如果您在API 28 pie上使用宽度和高度为0dp的隐藏EditText,它将无法正常工作。我成功地通过将尺寸设置为1dp并将小部件的所有部分设置为透明来使其正常工作。以下是我的解决方法:
<EditText
        android:id="@+id/hacked_edit_text"
        android:layout_width="1dp"
        android:layout_height="1dp"
        android:background="@android:color/transparent"
        android:cursorVisible="false"
        android:textColor="@android:color/transparent" />

1
我有一个EditText,它的宽度和高度设置为LinearLayout中的wrap_content,并且LinearLayout的可见性为INVISIBLE。在Android Pie中,我的EditText无法获取焦点。我使用了这个答案将我的editText的宽度和高度设置为1dp,然后它又像魔术般地正常工作了。 - 476rick

0
我的问题在于设备键盘设置。 语言和输入 默认键盘 将其更改为您的设备键盘,例如我的是三星。

enter image description here


0

它在官方文档中有很好的记录:

fun showSoftKeyboard(view: View) {
    if (view.requestFocus()) {
        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
    }
}

-4
<activity
    android:name=".activities.EmailLoginActivity"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"   
    android:windowSoftInputMode="stateVisible|adjustResize" />

希望这能对你有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接