使用支持首选项片段时,inputType在EditTextPreference中不起作用

时间:2018-06-16 15:37:03

标签: android android-preferences

当我使用支持库作为首选项时,EditTextPreference中的

inputType属性不起作用。

我正在使用的支持库版本

  

com.android.support:preference-v7:27.1.1

但是当我使用偏好片段时,inputType似乎有效 谁能解释一下为什么?

这是EditTextPreference的代码

  <EditTextPreference
            android:id="@+id/computer_ip"
            android:defaultValue="192.168.0.103"
            android:hint="Computer Ip"
            android:inputType="numberDecimal"
            android:key="@string/computerIp"
            android:padding="8dp"
            android:textSize="16sp"
            android:title="Computer Ip" />

在此代码中,当使用支持库时,inputType为numberDecimal,numberDecimal对键盘没有任何影响,而是显示带有所有字母的键盘。

3 个答案:

答案 0 :(得分:1)

有一个简单的解决方案,只需使用

EditTextPreference preference = (EditTextPreference) findPreference("key");
EditText et = preference.getEditText();
if (et != null) {
    et.setInputType(InputType.TYPE_CLASS_NUMBER);
    //in fact, you can do whatever you can normally with an EditText here
}

答案 1 :(得分:0)

您需要添加自定义布局并使用android:inputType =“ number”

指定EditText
<android.support.v7.preference.EditTextPreference
            android:dialogLayout="@layout/preference_dialog_edittext_custom"

这样您就可以复制原始的preference_dialog_layout.xml文件并进行编辑。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="48dp"
    android:layout_marginBottom="48dp"
    android:overScrollMode="ifContentScrolls">

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginStart="24dp"
      android:layout_marginEnd="24dp"
      android:orientation="vertical">

    <TextView android:id="@android:id/message"
        style="?android:attr/textAppearanceSmall"
        android:layout_marginBottom="48dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="?android:attr/textColorSecondary" />

    <EditText
        android:id="@android:id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:layout_marginStart="-4dp"
        android:layout_marginEnd="-4dp" />

  </LinearLayout>

</ScrollView>

答案 2 :(得分:0)

尝试一下:

            EditTextPreference numberPref = findPreference(STR_PREF_KEY_JANK_THRESHOLD);
        //https://developer.android.com/guide/topics/ui/settings/customize-your-settings#customize_an_edittextpreference_dialog
        numberPref.setOnBindEditTextListener(
                editText -> editText.setInputType(InputType.TYPE_CLASS_NUMBER));