0

键盘问题,在代码中 inputType 设置为数字,但键盘显示的是多行文本类型。问题仅在 Android N (7.0) 中显示

EditText 在 Listview 的标题内。在所有其他版本的 android 中,它的工作完美。

View header = getLayoutInflater().inflate(R.layout.cardlist_footer, listView, false);

在这个editText中当键盘焦点来到它时,焦点会跳转到页面中的第一个editText。它可以防止输入的数字

<EditText           
  android:id="@+id/editCardNumber"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_weight=".6"
  android:background="@drawable/drawable_edittext_bg"
  android:hint="xxxx-xxxx-xxxx-xxxx"
  android:inputType="number"
  android:maxLength="19"
  android:textColor="@android:color/white"
  android:textColorHint="@android:color/white" />

在此editText InputType 不工作。在代码中,inputType 设置为数字,但键盘显示的类型是多行文本

<EditText
  android:id="@+id/editSearchZipCode"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:layout_centerVertical="true"
  android:layout_marginLeft="5dp"
  android:layout_marginRight="5dp"
  android:layout_weight="1"
  android:background="@null"
  android:gravity="center_vertical"
  android:hint="Enter Zip"
  android:imeOptions="actionSearch"
  android:inputType="number"
  android:maxLines="1"
  android:textColor="@android:color/black"
  android:textColorHint="#9c9c9c" />
4

2 回答 2

2

您可以添加android:digits

如果设置,则指定此 TextView 具有数字输入法,并且这些特定字符是它将接受的字符。如果设置了此项,则 numeric 暗示为 true 。

    android:inputType="number"
    android:digits="0123456789"

编辑

这是一个开发级别#BUG

通过选择帮助 > 提交反馈从 Android Studio 打开错误报告。这是启动错误的最简单方法,因为它会使用您的 Android Studio 版本、Java 版本和系统信息填充错误报告,我们需要这些信息来正确重现问题。

于 2017-08-01T09:49:52.317 回答
0

更新时间:2017 年 11 月 6 日 17:52:19

@deprecated in Android 7.1 版本有一些问题!


试试这个,使用它需要您自担风险。

/**
 * 尝试性修复了在ListView里显示EditText InputType为 其它非text 类型时,弹出的软键盘会从数字键盘自动切换为 英文全键盘 的问题。
 */
class ListViewEx2 extends ListView
{
    public ListViewEx2(final Context context)
    {
        super(context);
    }

    public ListViewEx2(final Context context, final AttributeSet attrs)
    {
        super(context, attrs);
    }

    public ListViewEx2(final Context context, final AttributeSet attrs, final int defStyleAttr)
    {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public ListViewEx2(final Context context, final AttributeSet attrs, final int defStyleAttr, final int defStyleRes)
    {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onLayout(final boolean changed, final int l, final int t, final int r, final int b)
    {
        //经过初步测试,只有在Android 7.0平台以上的系统才会出现软键盘自动切换的问题。
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
        {
        //仅仅在 changed 为 true 时再调用,这样就可以避免了.
        if (changed)
            super.onLayout(changed, l, t, r, b);
        }
        else
            super.onLayout(changed, l, t, r, b);

    }
}
于 2017-10-25T09:23:51.173 回答