2010-07-08 98 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" />