Текстовый блок отображения экрана предпочтений

Я пытаюсь создать экран настроек, который имеет только оговорку о контактах и ​​контактах, а также правовую опцию, при каждом нажатии которой вы можете просто отображать текст и значок на отдельной странице, 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>