1

偏好屏幕 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;
   }
};

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

4

3 回答 3

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

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

于 2013-01-07T18:25:00.150 回答
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. 投射preferenceEditTextPreference
  2. 抓取EditText来自editTextPreference
  3. 检查以便EditText匹配的输入类型InputType.TYPE_NUMBER_FLAG_DECIMAL(对应android:numberDecimal于 XML)

如果您愿意,您可能可以将其写得更紧凑,但我选择将其分解以便更容易理解。:)

于 2013-01-07T18:25:30.230 回答
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;
   }
};

可用的输入类型:这里

于 2013-01-07T18:26:45.360 回答