我希望用户能够在300到2000之间输入/选择一个数字。我想使用EditTextPreference但我不知道如何检查该值是否实际在范围内。我对偏好屏幕很新。
我的Preferences.java
public class Preferences extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
SettingsFragment settingsFragment = new SettingsFragment();
fragmentTransaction.add(android.R.id.content, settingsFragment, "SETTINGS_FRAGMENT");
fragmentTransaction.commit();
}
public static class SettingsFragment extends PreferenceFragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_layout);
}
}
}
pref_layout.xml(它只包含一个首选项)
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="General">
<EditTextPreference
android:title="frequency"
android:summary="frequency"
android:key="interval"
android:defaultValue="300"
android:numeric="integer"/>
</PreferenceCategory>
</PreferenceScreen>
谢谢你
答案 0 :(得分:0)
您可以做的不是扩展PreferenceFragment
,而是扩展EditTextPreference
。您可以覆盖showDilog()
,在showDilog()
中可以添加TextWatcher
。你的代码看起来应该是这样的。
public static class InputValueEditTextPreference extends EditTextPreference {
public SettingsFragment(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void showDialog(Bundle state) {
super.showDialog(state);
EditText et = getEditText();
et.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
Dialog d = getDialog();
int num = Integer.parseInt(s.getText().toString());
if (d instanceof AlertDialog) {
AlertDialog dialog = (AlertDialog) d;
Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
// Check the EditText value
if (num >= 300 && num <= 2000) {
// Enable OK button
positiveButton.setEnabled(true);
} else {
// Disable the button.
positiveButton.setEnabled(false);
}
}
}
});
}
}
现在在xml文件中它应该是
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<<package name>.InputValueEditTextPreference
android:title="@string/pref_input_value_label"
android:key="@string/pref_input_value_key"
android:defaultValue="@string/pref_input_value_default"
android:inputType="number"
android:singleLine="true" />
这样做是根据插入编辑文本的值禁用ok按钮。
现在,用户输入的值将保存到SharedPrefrence
中,该值可以通过您为EditText提供的密钥进行处理。