私は少なくともapi 10をサポートしたいと思っています。私は自分の好みをうまくスタイルすることができるようにしたい、私はヘッダーを持つことができるようにしたい(またはPreferenceScreen
を表示する)。それはAppCompat
によって完全にサポートされていないPreferenceActivity
のようだ、フィットしません。だから私はAppCompatActivity
とPreferenceFragmentCompat
を使用しようとしています。android.support.v7.preferenceライブラリを使用してカスタム設定を作成するにはどうすればよいですか?
public class Prefs extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null)
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, new PreferencesFragment())
.commit();
}
public static class PreferencesFragment extends PreferenceFragmentCompat {
@Override public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onDisplayPreferenceDialog(Preference preference) {
// the following call results in a dialogue being shown
super.onDisplayPreferenceDialog(preference);
}
@Override public void onNavigateToScreen(PreferenceScreen preferenceScreen) {
// I can probably use this to go to to a nested preference screen
// I'm not sure...
}
}
}
ここで、フォントの選択肢を提供するカスタム設定を作成します。 PreferenceActivity
で、私は単純に
import android.preference.DialogPreference;
public class FontPreference extends DialogPreference {
public FontPreference(Context context, AttributeSet attrs) {super(context, attrs);}
@Override protected void onPrepareDialogBuilder(Builder builder) {
super.onPrepareDialogBuilder(builder);
// do something with builder and make a nice cute dialogue, for example, like this
builder.setSingleChoiceItems(new FontAdapter(), 0, null);
}
}
を行うことができ、それ
<my.app.FontPreference android:title="Choose font" android:summary="Unnecessary summary" />
を表示するには、このようなXMLを使用しかし、今、android.support.v7.preference.DialogPreference
にはonPrepareDialogBuilder
はありません。代わりに、PreferenceDialogFragmentCompat
に移動されました。私はそのことをどのように使うべきかについての情報はほとんど見つけず、xmlからそれを表示する方法はわかりません。
public void onDisplayPreferenceDialog(Preference preference) {
...
final DialogFragment f;
if (preference instanceof EditTextPreference)
f = EditTextPreferenceDialogFragment.newInstance(preference.getKey());
...
f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
}
Iはandroid.support.v7.preference.DialogPreference
をサブクラス化し、onDisplayPreferenceDialog
ダミーFontPreferenceFragment
をインスタンス化するコードの同様の部分を使用するが、それは次の例外で失敗有する試み:V14嗜好断片は、以下のコードを有しています。
java.lang.IllegalStateException: Target fragment must implement TargetFragment interface
この時点では、私はすでにあまりにも混乱に深く、さらなる掘り起こしたくありません。 Googleはこの例外について何も知らない。とにかく、この方法はあまりにも複雑なようです。だから、android.support.v7.preferenceライブラリを使用してカスタム設定を作成する最良の方法は何ですか?
ほぼ完璧なソリューション! onDisplayPreferenceDialogがPreferenceFragmentCompatを継承している嗜好フラグメントでオーバーライドする必要があることを理解するまでにはしばらく時間がかかりました。どうもありがとう! –
これを読んでいる人のための注意:PreferenceDialogFragmentCompat.java:57/58でClassCastExceptionが発生した場合は、bundle.putString( "key"、preference.getKey());上記のように「キー」が表示されます。それ以外の場合、getArguments()。getString(ARG_KEY)はClassCastExceptionで失敗します。 – MCLLC
お持ちの場合は完全な例を投稿してください。私は新しいサポートの設定を実装することに成功しましたが、DialogPreferencesは大事なものです。 Googleは、これに関するドキュメントを提供していません。 –