Можно ли получить доступ к настройкам в макете XML?

Я работаю над внедрением некоторых простых настроек в приложение, которое у меня есть, и пытаюсь понять, как использовать настройку для управления представлением, определенным в файле XML. У меня есть список со следующим LinearLayout (player_row.xml), используемым для каждой строки:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <ImageView android:id="@+id/player_icon"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"/>
  <TextView android:id="@+id/player_name"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:textSize="30sp"
   android:textColor="#F0F0F0"
   android:layout_weight="1"
   android:layout_marginLeft="5dp"/>
  <TextView android:id="@+id/player_score"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:textSize="30sp"
   android:textColor="#F0F0F0"/>
</LinearLayout>

Прямо сейчас я указываю атрибут textSize вручную. Я хотел бы создать меню предпочтений, которое позволяет пользователю выбирать из нескольких вариантов, например «Маленький», «Средний» и «Большой». Я полагаю, что должен иметь возможность настроить массивы для размера записи и шрифта, а затем сослаться на это в player_row.xml, но, похоже, у меня не получается.

предпочтения.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
   android:key="preference_main">
   <ListPreference
      android:key="fontSizePreference"
      android:title="Font size"
      android:entries="@array/fontSizeList"
      android:entryValues="@array/fontSizeList_Values"/>
</PreferenceScreen>

массивы.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string-array name="fontSizeList">
    <item>Small</item>
    <item>Medium</item>
    <item>Large</item>
  </string-array>
  <string-array name="fontSizeList_Values">
    <item>22sp</item>
    <item>26sp</item>
    <item>30sp</item>
  </string-array>
</resources>

Если это невозможно сделать, как правильно настроить макет с помощью настроек? Мой поиск привел меня к тому, что я нашел несколько ресурсов для программного доступа к настройкам, но ни один из них не кажется подходящим способом настройки макета, определенного в файле XML.


person Thomas    schedule 18.11.2010    source источник


Ответы (1)


Я думаю, что процедура, которую вы ищете, это:

  1. Создать экран настроек и активность
  2. Как только пользователь сохранит настройки, пусть ваша поддержка PreferenceActivity сохранит настройки в файл (используя getPreferences(MODE_PRIVATE).edit().putString(PREF_FONT_SIZE, yourSetting).commit()
  3. В вашем основном действии#onCreate загрузите макет с помощью setContentView
  4. Загрузите свои настройки туда же
  5. Получите представления через findViewById и установите размер шрифта, поскольку он загружается из настроек.
person Sebastian Roth    schedule 18.11.2010
comment
Это то, что я думал, что мне нужно будет сделать. Я надеялся, что будет способ сделать все это через файл макета. - person Thomas; 18.11.2010
comment
Как это могло сработать? Вам понадобится другой файл сопоставления XML или, по крайней мере, ссылка из файла layout.xml на настройку ... не говоря уже о значениях по умолчанию, недопустимых типах и т. д. Я думаю, что это хорошо, как сейчас. ;-) - person Sebastian Roth; 18.11.2010
comment
Ну, вы указываете ключ, я не был уверен, что он автоматически сгенерирует ресурс, например @pref/font_size или что-то в этом роде. В любом случае это не имеет большого значения, я просто хотел убедиться, что не упускаю ничего фундаментального. - person Thomas; 18.11.2010
comment
Технически это может сработать. Но, как уже было сказано, это потребует дополнительной работы, поскольку тогда вы ДОЛЖНЫ иметь уникальные имена ключей на всех ваших страницах настроек (представьте размеры шрифта для разных частей вашей деятельности). Тогда, пожалуйста, мне нужен синтаксис типа android:textSizePrefOverlayout="@pref/font_size_list". :-} - person Sebastian Roth; 18.11.2010
comment
Это или кажется, что это может быть реализовано с помощью элемента типа состояния, похожего на то, как могут работать чертежи и цвета. Я не уверен, как будет работать ваш пример создания вторичного файла сопоставления. Это потребовало бы возможности заполнять ресурсы во время выполнения, чего я не думаю, что вы могли бы сделать. Кажется, что необходимая сложность делает очевидным, что это неправильный выбор. Спасибо! - person Thomas; 18.11.2010