アバウト、連絡先、法的オプションだけを備えた設定画面を作成しようとしています。これらすべてをクリックすると、テキストの宣伝文句とアイコンが別のページに表示され、shared preferences
などは表示されません。
テキストを表示するための階層を理解するのに問題があります。フローを次のようにしたいと思います:settings -> about -> the about text
現在、これがあり、カテゴリとオプションがありますが、新しいテキストを表示するために何を作成すればよいかわかりません。
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
<PreferenceCategory
Android:title="Info">
<Preference Android:title="About"/>
</PreferenceCategory>
...
</PreferenceScreen>
アバウトをクリックしてテキストビューにするために使用するオプションがわかりません。
PreferenceScreen
内にフォーマットされたテキストブロックを追加することはできません。これは、本来の目的ではありません。ただし、Aboutテキストを別のアクティビティ内に追加することはできます(LinearLayout
とフォーマットされたTextView
sで十分な場合があります)。プリファレンス内にインテントを渡すことでこれを呼び出します。
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<Preference
Android:key="about"
Android:title="About">
<intent Android:action="your.package.path.to.Activity"/>
</Preference>
</PreferenceScreen>
A.Grandtのソリューションは、設定アクティビティ内のテキストブロックの非常に優れた模倣を提供しますが、Android:persistent="false"
属性を追加します。これにより、この「疑似設定」がアプリの設定用のSharedPreferencesファイルに不必要に保存されるのを防ぎます。
総括する。 A.Grandtが提案したように、Preferencesアクティビティ内のTextViewの模倣は次のようになります。
<Preference
Android:key="pref_static_field_key"
Android:selectable="false"
Android:persistent="false"
Android:title="you can omit the title"
Android:summary="Multi line description\ncan go here."/>
改行には\n
を使用できますが、設定項目自体のサイズは変更されないため、これらの複数行がまだ1行の設定項目内に完全に表示されない可能性があります。
同じ問題が発生し、静的テキストブロックを表示する必要がありました。私の場合、それは設定ページに並んでいましたが。
タグはリンクを許可しますが、静的テキストの必要性は解決されません。ただし、Preferenceタグ自体はそうです。テキスト、通常のタイトル行、およびその下のテキストの概要を表示することができます。どちらもオプションであり、選択できないようにします。静的なテキストのような錯覚を与えます。
<Preference
Android:key="pref_static_field_key"
Android:selectable="false"
Android:title="you can omit the title"
Android:summary="Multi line description\ncan go here."/>
テキストブロックを追加したかったのですが、実際のテキストコンテンツをプログラムで設定しました。私の特定のニーズ:設定画面の上部にアプリのバージョン名を表示します。
A.Grandt と Krzysiek のアプローチに従い、コードで要約を設定しました。
dev_preferences.xml
:
<Preference
Android:key="pref_app_version"
Android:persistent="false"
Android:selectable="false"
Android:title="@string/app_name" />
プリファレンスフラグメント(extends PreferenceFragment
):
private static final String KEY_APP_VERSION = "pref_app_version";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.dev_preferences);
findPreference(KEY_APP_VERSION).setSummary(BuildConfig.VERSION_NAME);
}
また、Android:layout="@layout/dev_preferences_header"
エントリに<Preference>
を設定することにより、カスタムレイアウト( この回答のように )を使用することになりました。 (必須ではありませんが、この方法で、設定の「ヘッダー」の外観を簡単にカスタマイズできます。)
dev_preferences_header.xml
:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?android:attr/listPreferredItemHeight"
Android:padding="@dimen/spacing_small">
<TextView
Android:id="@Android:id/title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
Android:id="@Android:id/summary"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@Android:id/title" />
</RelativeLayout>
[設定]ページで、アプリケーションデータの最終バックアップ日時を表示したいと思います。
(インスピレーション: https://developer.Android.com/reference/Android/content/SharedPreferences.Editor )
1)私のpreference.xml:
<PreferenceCategory app:title="Backup last execution">
<EditTextPreference
app:key="backup"
app:selectable="false"
app:summary="never"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
2)私のクラスユーティリティ{コンパニオンオブジェクト}:
fun Utility.Companion.storeToPreferences(key:String, value:String){
val sharedPref: SharedPreferences =
PreferenceManager.getDefaultSharedPreferences(context)
val editor = sharedPref.edit()
editor.putString(key, value)
editor.apply()
}
3)私の電話:
Utility.storeToPreferences("backup", LAST_BACKUP)