Текстовый блок отображения экрана предпочтений
Я пытаюсь создать экран настроек, который имеет только оговорку о контактах и контактах, а также правовую опцию, при каждом нажатии которой вы можете просто отображать текст и значок на отдельной странице, 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>
Я не знаю, какую опцию использовать, чтобы сделать кликабельным в текстовое представление.
Ответы
Ответ 1
Вы не можете добавить форматированный текстовый блок внутри PreferenceScreen
, что не значит, что это значит. Однако вы можете добавить текст "О тексте" внутри другого действия (может быть достаточно LinearLayout
с некоторым отформатированным TextView
). Назовите это, передав намерение в предпочтении:
<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>
Ответ 2
Решение A.Grandt дает действительно приятную имитацию текстового блока в Activity Preference, но я бы добавил атрибут android:persistent="false"
, который позволяет избежать ненужного сохранения этого "псевдо-предпочтения" в файле SharedPreferences для настроек вашего приложения.
Подводя итог. Имитация 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
для разрыва строки, но он не будет изменять размер самого элемента предпочтения, поэтому существует вероятность того, что эти многострочные линии не будут полностью видны в неподвижной однострочной элементе предпочтения.
Ответ 3
У меня была такая же проблема, и мне нужно было показать статический текстовый блок. Хотя в моем случае он был выровнен на странице предпочтений.
Тег разрешает связывание, хотя это не решает необходимость статического текста. Однако сам тег 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."/>
Ответ 4
Я хотел добавить текстовый блок, но программно установить фактический текстовый контент. Моя конкретная необходимость: показать имя версии приложения в верхней части экрана настроек.
Я сделал это после подхода 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>