Edittext inputType&的问题专注Android N(7.0)

时间:2017-08-01 09:46:01

标签: android keyboard android-inputtype

键盘问题,在代码中,inputType设置为number,但键盘显示的是带有多行的文本类型。问题仅显示在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设置为number,但键盘显示的是带有多行的文本类型

<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" />

2 个答案:

答案 0 :(得分:1)

您可以添加 android:digits

  

如果设置,则指定此TextView具有数字输入方法和   这些特定字符是它将接受的字符。如果   这是设置,数字隐含为真。

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

修改

这是开发级 #BUG

  

选择帮助&gt;从Android Studio打开错误报告提交   反馈。这是启动bug的最简单方法,因为它填充了   与您的Android Studio版本,Java版本和   系统信息,我们需要正确地重现这个问题。

答案 1 :(得分:0)

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

<强> @deprecated 在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);

    }
}