有沒有辦法在僅接受整數值的首選區段中創建首選項?我可以實現一個EditTextPreference並註冊一個OnPreferenceChangeListener其中我可以拒絕更改,如果用戶輸入一個字符串不是一個數字,但我更喜歡的東西是爲了只持有號碼,並且不允許用戶輸入任何東西,也許只顯示一個撥號盤鍵盤..我沒有這樣的偏好存在,因爲偏好的每個後代被映射到布爾(CheckBoxPreference),一個字符串(* EditTextPreference)或一個字符串數組(MultiSelectListPreference),即沒有偏好映射到整數,但也許有些人可以給我一個提示或至少告訴我是否有比我提出的更好的解決方案ab OVE。灰色提出如何創建只接受整數值的首選項
解決方案:
EditText editText = ((EditTextPreference)
findPreference("intent_property")).getEditText();
editText.setKeyListener(new NumberKeyListener() {
@Override
public int getInputType() {
// The following shows the standard keyboard but switches to the view
// with numbers on available on the top line of chars
return InputType.TYPE_CLASS_NUMBER;
// Return the following to show a dialpad as the one shown when entering phone
// numbers.
// return InputType.TYPE_CLASS_PHONE
}
@Override
protected char[] getAcceptedChars() {
return new String("1234567890").toCharArray();
}
});
較短的解決方案,即不允許改變鍵盤撥號盤,但需要較少的代碼:
EditText editText = ((EditTextPreference)
findPreference("intent_property")).getEditText();
editText.setKeyListener(new DigitsKeyListener());
我不喜歡這個解決方案只是一件事:用戶可以輸入0000,並將其接受並保存在共享首選項(這是一個字符串)爲「0000」..這需要你實現OnSharedPreferenceChangeListener來攔截對共享首選項的更改並刪除此首選項中的前導零或直接在此首選項上實現更改偵聽器,並返回false以拒絕具有尾隨零的數字(告訴我是否存在針對最後一個問題的更好解決方案不涉及實施您自己的偏好)。這將是美的,如果我們可以修改NEWVALUE在OnPreferenceChangeListener ..
你怎麼樣採取['的的EditTextPreference'源(http://grepcode.com/file/repository.grepcode.com/java/ext/com.google。 android/android/4.0.4_r1.2/android/preference/EditTextPreference.java#EditTextPreference)作爲起點,並將所有與字符串相關的方法替換爲基於int的對應方法?對我來說似乎很簡單。此外,從那時起,您可以直接訪問「EditText」對象,您可以根據自己的喜好設置任意數字輸入類型。 –
@MH如果我以編程方式管理首選項,似乎很簡單,但如果我創建* EditTextIntegerPreference *,例如,我不能在傳遞給* PreferenceFragment *的XML文件中使用它,或者有辦法註冊一個新的XML標籤映射到我的新對象? –
您可以像使用自定義視圖一樣使用xml文件中的自定義首選項。只需提供完全合格的課程名稱;例如'com.costanzi.gianni.example.ExamplePreference'。有關示例,請參閱[此API演示](http://developer.android.com/resources/samples/ApiDemos/res/xml/advanced_preferences.html)。 –