2010-07-08 6 views
37

Điều tôi muốn làm là tôi đang làm việc trên một trò chơi của chương trình cuộc sống. Tôi muốn mất thời gian trì hoãn và làm cho nó trở thành một sở thích, nhưng tôi muốn làm cho nó có sẵn cho mọi người gõ vào một thời điểm cụ thể. Số có thể bằng mili giây hoặc giây.Tùy chọn số trong Hoạt động ưu tiên trong Android

Tuy nhiên tôi hơi bị kẹt về cách tiếp tục, tôi chưa thể tìm thấy một tùy chọn đơn giản đã xử lý việc này, nhưng có thể có một. Có cách nào dễ dàng để thực hiện tùy chọn này và xác nhận rằng dữ liệu đã nhập là số nguyên hoặc nổi không?

Trả lời

16

Nếu bạn đang sử dụng một PreferenceActivity mà bạn có thể, không có sẵn.

Bạn sẽ cần phải làm một cái gì đó như thế này:

/** 
* 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

Vấn đề duy nhất là trì hoãnPreference không được định nghĩa trong ví dụ (đó là tùy chọn tôi biết) Ngoài ra đây là mã cho bên trong lớp hoạt động ưu tiên, nhưng có vẻ hoạt động tốt, cảm ơn bạn rất nhiều. – Kinglink

81

Sử dụng một EditTextPreference và thiết lập các loại đầu vào cho TYPE_CLASS_NUMBER. Điều này sẽ buộc người dùng nhập số và không phải chữ cái.

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

Cái này hoạt động và phải trả lời cho câu hỏi này. Mặc dù dấu chấm, dấu phẩy và các giá trị khác được hiển thị cho người dùng, người dùng ** không thể ** chèn chúng. Vì vậy, chỉ có đầu vào bạn nhận được từ đây là số. –

+26

Bạn cũng có thể sử dụng 'android: inputType =" number "' khi làm việc với XML. – tslocum

37

Bạn cũng có thể thực thi nó với thuộc tính xml android:numeric. Các giá trị có liên quan có thể có cho thuộc tính này là decimalinteger.

+1

'EditTextPreference' không có tham số' số'. –

+8

@SYLARRR Nó có. 'EditTextPreference' hỗ trợ tất cả các thuộc tính của' EditText'. Và tôi đang sử dụng thuộc tính này trong dự án của tôi. – HRJ

+2

điều này đã giúp tôi tiết kiệm rất nhiều rắc rối - nhiều người cảm ơn – bph

28

Bạn cũng có thể thực hiện việc này trực tiếp trong preferences.xml. Một cái gì đó như thế này sẽ hoạt động:

<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" />