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

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

Я не знаю, какую опцию использовать, чтобы сделать информацию о кликабельной в текстовом представлении.


person Nick    schedule 09.08.2012    source источник


Ответы (5)


Вы не можете добавить форматированный текстовый блок внутри 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>
person Sergi Juanola    schedule 09.08.2012
comment
Можете ли вы рассказать об этом подробнее? Должен ли я вызывать намерение для действия, чтобы отобразить текстовый блок? - person Nick; 09.08.2012
comment
ну, текстовый блок сам по себе не должен быть на странице настроек. Если вы не добавите сводку к этой информации (которая будет просто отображать неформатированный текст), ваш единственный вариант — открыть новое действие или просто определить страницу «О программе» как другую вещь, а не как страницу настроек. - person Sergi Juanola; 09.08.2012
comment
Хорошо, я понимаю, что ты имеешь в виду. Могу ли я сделать так, чтобы мое предпочтение при нажатии переводило его в другое предпочтение, в котором я использую заголовок и сводку для отображения текста с одним намерением? По сути, создать еще один файл настроек XML, который будет отображаться при нажатии кнопки «О программе» на экране основных настроек? - person Nick; 09.08.2012
comment
Нет-нет, каждое предпочтение может содержать заголовок и сводку. Я говорил о добавлении вашего «о» в это резюме. В любом случае, не лучше ли разместить страницу «О нас», скажем, в более классическом макете? Например, LinearLayout. Потому что PreferenceScreen хорош для отображения списка различных тем или, самое большее, списка ссылок (что, на мой взгляд, лучше подходит для ListView). Ради настройки я бы выбрал другую вещь, а не PreferenceScreen, содержащую ваш текст. - person Sergi Juanola; 09.08.2012

Решение А. Грандта дает действительно хорошую имитацию текстового блока в Preference Activity, но я бы добавил атрибут android:persistent="false", который позволяет избежать ненужного сохранения этого «псевдопредпочтения» в файле SharedPreferences для настроек вашего приложения.

Подводить итоги. Имитация TextView в Preferences Activity, как предложил А. Грандт, будет:

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

person Krzysiek    schedule 30.10.2014
comment
Есть ли способ, используя этот подход, установить значение текстового блока (резюме) в коде? (Случай использования: показать название версии приложения в верхней части экрана настроек.) - person Jonik; 12.04.2017
comment
Это оказалось довольно просто; в коде найдите предпочтение и установите для него сводку. - person Jonik; 12.04.2017

У меня была та же проблема, и мне нужно было показать статический текстовый блок. Хотя в моем случае это было указано на странице настроек.

Тег позволяет создавать ссылки, хотя это не устраняет необходимость в статическом тексте. Однако сам тег 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."/>
person A.Grandt    schedule 22.08.2013
comment
Примечание. Тег Preference также имеет атрибут android:fragment, который, похоже, ссылается на фрагмент предпочтения. Это, в сочетании с вышеизложенным, похоже, то, что вам нужно для вашего окна «О программе». - person A.Grandt; 22.08.2013

Я хотел добавить текстовый блок, но установил фактическое текстовое содержимое программно. Моя конкретная потребность: показать название версии приложения в верхней части экрана настроек.

Я сделал это, следуя подходу 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>
person Jonik    schedule 12.04.2017

На моей странице настроек я хочу показать дату и время последней резервной копии данных моего приложения.

(На основе: https://developer.android.com/reference/android/content/SharedPreferences.Editor)

1) В моих предпочтениях.xml:

<PreferenceCategory app:title="Backup last execution">
    <EditTextPreference
        app:key="backup"
        app:selectable="false"
        app:summary="never"
        app:useSimpleSummaryProvider="true" />
</PreferenceCategory>

2) В моем классе Utility {сопутствующий объект}:

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)
person Caesar    schedule 01.04.2020