Nexus 7上的软键盘显示,但Nexus 6P上没有

时间:2016-02-14 00:43:09

标签: android android-layout keyboard

我正在从一本书中创建一个简单的小费计算器程序,并且在Nexus 6P上运行应用程序时无法显示数字软键盘。如果我在Nexus 7上运行应用程序,它会按预期工作。 Nexus 6P可能存在问题,还是我忽视了一些问题?

我在活动的清单中尝试了几个设置:
    android:windowSoftInputMode =“stateAlwaysVisible | adjustResize | adjustPan”

开始使用stateAlwaysVisible并添加其他人以尝试解决问题。

我在xml中有requestFocus和输入类型:

    <EditText
        android:id="@+id/amountEditText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="1"
        android:layout_row="0"
        android:digits="0123456789"
        android:inputType="number"
        android:maxLength="6">
        <requestFocus />
    </EditText>/>


    <TextView
    android:id="@+id/amountDisplayTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_column="1"
    android:layout_gravity="fill_horizontal"
    android:layout_row="0"
    android:background="@android:color/holo_blue_bright"
    android:padding="@dimen/textview_padding"
    android:textAppearance="?android:attr/textAppearanceMedium" />

在java代码中,我再次尝试将焦点设置在amountEditText字段:

amountEditText = (EditText) findViewById(R.id.amountEditText);
    amountEditText.requestFocus();
    amountEditText.addTextChangedListener(amountEditTextWatcher);
    amountEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            resetUI();
        }
    });
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(amountEditText, InputMethodManager.SHOW_IMPLICIT);

当我在Nexus 7(Android 5.1.1)上运行时,软件键盘会在应用程序启动时显示,正如预期的那样。

当我在Nexus 6P(Android 6.0.1)上运行时,应用程序启动时不会显示软键盘。但是,如果我多次点击输入字段,则可能决定显示软键盘。如果是,那么它是一个较小的键盘,然后使用Nexus 7。

我已经在Android Studio 1.5和2.0 Beta 4中为这些设备生成了代码。结果相同。

目标SDK版本为23,最低SDK版本为21.尝试将目标SDK版本更改为22 - 没有乐趣。

任何建议都将不胜感激。

修改

经过进一步测试后,看起来GridLayout遇到了约束和删除内容的问题,虽然错误信息不是很清楚问题是什么:

D / android.widget.GridLayout:水平约束:x2-x1&gt; = 482,x2-x0&lt; = 2112,x2-x1&lt; = 100不一致;永久删除:x2-x0&lt; = 2112,x2-x1 <= 100。

D / android.widget.GridLayout:垂直约束:y2-y1&gt; = 113,y3-y2&gt; = 0,y4-y3&gt; = 113,y5-y4&gt; = 169,y6-y5&gt; = 169,y7 -y6> = 0,y8-y7> = 0,y2-y1 <= 91,y1-y0 <= 186不一致;永久删除:y2-y1 <= 91。

同样,当我使用Nexus 6P时,这似乎只是一个问题。

因此,我重新编写应用程序xml以使用RelativeLayout和嵌入的LinearLayout而不是GridLayout。

应用程序现在效果更好,但在点击EditText字段之前,软键盘不会自动显示。

我仍然在onCreate中请求焦点并使用:

android:windowSoftInputMode = "stateAlwaysVisible|adjustResize"

表示清单中的活动。

由于应用程序的运行状态足以满足我的使用需求,我认为我已经在这个应用程序的这一点上尽力而为,并且在这种情况下可以考虑关闭此问题。

然而,如果有人想出我可以尝试的其他东西,我愿意试一试。

由于

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。键盘只会显示一次,而不会再次显示,仅适用于Nexus 6P和横向。要解决此问题,我在横向广告时更改了showSoftInput来电:imm.showSoftInput(myEditText, 0);