Как сделать только чтение (программно заполнено) Предпочтения?
Как создать элементы настроек с программно заполненными значениями (например: Версия, Номер модели...)?
Ответы
Ответ 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);