首选项:单击首选项时可以找到输入类型

时间:2013-01-07 18:18:04

标签: android android-preferences

首选项屏幕XML;请注意,一个首选项是“numberDecimal”。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <EditTextPreference
        android:inputType="textCapWords"
        android:key="tsName"
        android:title="@string/pref_common_test_name_title" />
    <EditTextPreference
        android:inputType="numberDecimal"
        android:key="tsSledWeightValue"
        android:title="@string/pref_cof_test_sled_weight" />
</PreferenceScreen>

Preference onClick方法:现在我想确定该首选项的输入类型是否为“numberDecimal”,因为我想调用自定义编辑器。

private static Preference.OnPreferenceClickListener sBindEditorToPreferenceClickListener = new Preference.OnPreferenceClickListener() {
    public boolean onPreferenceClick(Preference preference) {
        boolean isHandled = false;
        if (preference instanceof EditTextPreference) {
// *******  CAN I FIND THE PREFERENCE'S "inputType" HERE?
// ******* EXAMPLE: if(preference.inputType == android:numberDecimal) {}
        }
        return isHandled;
   }
};

编辑:或者有更好的方法来实现这个吗?

3 个答案:

答案 0 :(得分:1)

 if(preference instanceof EditTextPreference) {
    EditText prefText = ((EditTextPreference) preference).getEditText();
    int type = prefText.getInputType();
    //do stuff
 )

虽然看起来有点奇怪。你真的想做什么?找出哪一个被点击了?只需分配不同的点击监听器。

答案 1 :(得分:1)

你可能会这样做:

    private static Preference.OnPreferenceClickListener sBindEditorToPreferenceClickListener = new Preference.OnPreferenceClickListener() {
    public boolean onPreferenceClick(Preference preference) {
        boolean isHandled = false;
        if (preference instanceof EditTextPreference) {
            EditTextPreference editTextPreference = (EditTextPreference) preference;
            EditText editText = editTextPreference.getEditText();
            if( editText.getInputType() == InputType.TYPE_NUMBER_FLAG_DECIMAL ) {
                /**********************
                   Do your thing here 
                **********************/
                isHandled = true;
            }
        }
        return isHandled;
   }
};

您的代码和上面的代码段之间的最大区别在于它的......

  1. preference投射到EditTextPreference
  2. EditText
  3. 抓取editTextPreference
  4. 检查以使EditText的输入类型与InputType.TYPE_NUMBER_FLAG_DECIMAL匹配(对应于XML中的android:numberDecimal
  5. 如果你想要的话,你可能会写得更紧凑,但我选择将其分解,以便更容易理解。 :)

答案 2 :(得分:0)

你应该这样做:

private static Preference.OnPreferenceClickListener sBindEditorToPreferenceClickListener = new Preference.OnPreferenceClickListener() {
    public boolean onPreferenceClick(Preference preference) {
        boolean isHandled = false;
        if (preference instanceof EditTextPreference) {
              if (((EditTextPreference)preference).getEditText().getInputType()==InputType.TYPE_NUMBER_FLAG_DECIMAL)
              {}
        }
        return isHandled;
   }
};

可用的输入类型:here