カスタムEditTextPreference作成:
public class CustomEditTextPreference extends EditTextPreference {
public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomEditTextPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomEditTextPreference(Context context) {
super(context);
}
}
がprefencesのためのXMLファイルにそれを宣言しました:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.example.CustomEditTextPreference
android:key="test_key"
android:title="Title" />
</PreferenceScreen>
次の行を使用してPreferenceFragmentCompatを更新します。あなたはより強力な(*すなわちを使用したい場合は
public class PrefFragment extends PreferenceFragmentCompat {
private static final String DIALOG_FRAGMENT_TAG =
"android.support.v7.preference.PreferenceFragment.DIALOG";
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.settings);
}
@Override
public void onDisplayPreferenceDialog(Preference preference) {
// check if dialog is already showing
if (getFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) {
return;
}
DialogFragment f = null;
if (preference instanceof CustomEditTextPreference) {
f = EditTextPreferenceDialog.newInstance(preference.getKey());
} else {
super.onDisplayPreferenceDialog(preference);
}
if (f != null) {
f.setTargetFragment(this, 0);
f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
}
}
public static class EditTextPreferenceDialog extends EditTextPreferenceDialogFragmentCompat {
public static EditTextPreferenceDialog newInstance(String key) {
final EditTextPreferenceDialog
fragment = new EditTextPreferenceDialog();
final Bundle b = new Bundle(1);
b.putString(ARG_KEY, key);
fragment.setArguments(b);
return fragment;
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
((EditText)view.findViewById(android.R.id.edit)).setFilters(new InputFilter[]{new NumericRangeFilter()});
}
}
}
。受け入れられたソリューションのコード*バージョンから設定するのではなくXMLを使用して属性を設定すると、私はあなたの回避策を見てみることをお勧めします。**興味深いもの**:https://github.com/Gericop/Android-サポート - プリファレンス-V7-Fix –
リンクのおかげで、属性だけでは対処できないものもありましたが、スタイリング要素が役立つでしょう。このサポートライブラリでどのくらい壊れているか驚くべきことです。 – CodeChimp
私はGoogleにバグを報告しました。それに対処できるようにスター付きにしてください: https://code.google.com/p/android/issues/detail?id=233169&q=EditTextPreference&colspec=ID%20Status%20Priority%20Owner %20Summary%20Stars%20Reporter%20Opened –