2010-07-08 120 views
37

我想要做的是我正在開發一款生活遊戲程序。我想延遲時間並使其成爲首選項,但我希望讓人們可以在特定時間輸入。該數字可以以毫秒或秒爲單位。Android中首選項活動中的數字首選項

但是我有點卡在如何繼續,我一直沒能找到一個簡單的首選項已經處理這個,但可能會有一個。是否有一種簡單的方法可以製作此首選項並確認輸入的數據是整數還是浮點數?

回答

16

如果您使用的是您可能屬於的PreferenceActivity,則沒有可用的PreferenceActivity。

你需要做這樣的事情:

/** 
* Checks that a preference is a valid numerical value 
*/ 
Preference.OnPreferenceChangeListener numberCheckListener = new OnPreferenceChangeListener() { 

    @Override 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     //Check that the string is an integer. 
     return numberCheck(newValue); 
    } 
}; 

private boolean numberCheck(Object newValue) { 
    if(!newValue.toString().equals("") && newValue.toString().matches("\\d*")) { 
     return true; 
    } 
    else { 
     Toast.makeText(ActivityUserPreferences.this, newValue+" "+getResources().getString(R.string.is_an_invalid_number), Toast.LENGTH_SHORT).show(); 
     return false; 
    } 
} 


    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //get XML preferences 
    addPreferencesFromResource(R.xml.user_preferences); 


    //get a handle on preferences that require validation 
    delayPreference = getPreferenceScreen().findPreference("pref_delay"); 

    //Validate numbers only 
    delayPreference.setOnPreferenceChangeListener(numberCheckListener); 

} 
+0

唯一的問題是delayPreference未在本例中(這是一個偏好,我知道)定義另外這對於偏好活動類中的代碼,但似乎運作良好,非常感謝你許多。 – Kinglink 2010-07-14 03:01:36

81

使用的EditTextPreference並設定輸入類型TYPE_CLASS_NUMBER。這將強制用戶輸入數字而不是字母。

EditTextPreference pref = (EditTextPreference)findPreference("preference_name"); 
pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER); 
+9

這一個作品,應該回答這個問題。雖然點,彗星和其他值顯示給用戶,用戶**不能**插入它們。所以只有你從這個數字中得到的輸入是數字。 – 2012-03-23 10:32:13

+26

使用XML時,您還可以使用'android:inputType =「number」'。 – tslocum 2014-08-20 02:41:10

37

您也可以使用xml屬性android:numeric來強制執行它。此屬性的可能相關值爲decimalinteger

+1

'EditTextPreference'沒有參數'numeric'。 – 2012-03-23 10:25:54

+8

@SYLARRR它的確如此。 EditTextPreference支持EditText的所有屬性。我在我的項目中使用了這個屬性。 – HRJ 2012-03-23 12:42:43

+2

這節省了我很多麻煩 - 非常感謝 – bph 2012-09-03 13:05:50

28

您也可以直接在您的preferences.xml中執行此操作。像這樣的東西會工作:

<EditTextPreference 
    android:defaultValue="100" 
    android:dialogTitle="@string/pref_query_limit" 
    android:inputType="number" 
    android:key="pref_query_limit" 
    android:summary="@string/pref_query_limit_summ" 
    android:title="@string/pref_query_limit" />