Как сделать только чтение (программно заполнено) Предпочтения?

Как создать элементы настроек с программно заполненными значениями (например: Версия, Номер модели...)?

Ответы

Ответ 1

Вы можете установить настройки внутри вашего кода и проверить, заполнено ли оно до его заполнения. Пока вы не предоставляете пользователям доступ к изменению этой информации, все, что они могут сделать, это "очистить локальные данные", что заставит программу повторно заполнить данные, если вы сделаете это правильно.

Я использую эту технику для хранения уникальных идентификаторов для устройства, которые вошли в систему и т.д. Пользователь даже не знает (и не должен) знать, что я отслеживаю, все, что они знают, это плавная программа, которая делает то, что им нужно для этого.

Пример:

SharedPreferences settings = context.getSharedPreferences("preferanceName", 0);
SharedPreferences.Editor editor = settings.edit();
int value = foo;
editor.putInt("ValueToStore", value);
editor.commit();

Ответ 2

Почему бы не использовать android.preference.Preference напрямую?

<Preference 
 android:key="version"
 android:title="@string/version" />

Нет диалога редактирования, больше атрибутов и информации!

//Set the version string in your code 
findPreference("version").setSummary(version);

Ответ 3

Я сделал это со следующим:

В моем приложении application_preferences.xml у меня есть следующее предпочтение. Это делает его таким, что он все еще черный (не серый), но пользователь не может редактировать его. Сделать серый цвет затрудняет чтение.

<EditTextPreference
    android:key="version"
    android:title="@string/version"
    android:enabled="false" 
    android:selectable="false"
    android:persistent="false"
    android:shouldDisableView="false"/>

В режиме предпочтения onCreate, получите предпочтение версии и установите заголовок в версию приложения.

EditTextPreference versionPref = (EditTextPreference)findPreference("version");
String version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
versionPref.setTitle(getString(R.string.version) + ": " + version);

Ответ 4

Кевин Вествуд - это отличное спасибо!

В моем случае я просто изменяю setTitle на setSummary, поэтому значение видно ниже.

    String serverUrl = "http://...";
    EditTextPreference pref = (EditTextPreference)findPreference("serverPrefKey");
    pref.setSummary(serverUrl);