PreferenceActivity работает правильно на Android 2.1, но не на 4.1 (дополнено)
Я пишу заявку. Он должен работать на старых ОС Android, чтобы быть полезным. Я написал экран настроек с использованием PreferencesActivity, которое заполняется файлом options.xml, который содержит PreferenceScreen. В нем нет подменю для предпочтений (поэтому PreferenceFragment не предоставляет реальных преимуществ).
В Android 2.1 (2.2 и 2.3, еще не тестировали на ICS) экран отображается правильно, как в ландшафте:
Но на Jellybean это выглядит так:
Это выглядит ужасно. У меня ничего не определено как макет, просто стандартный addPreferencesFromResource(). Кто-нибудь знает, в чем причина? Или решение?
Мой onCreate выглядит так:
protected void onCreate(Bundle savedInstanceState) { //
super.onCreate(savedInstanceState);
Log.i(TAG, "Options Activity Loaded.");
setTitle(getString(R.string.optionsTitle));
addPreferencesFromResource(R.xml.options);
setupListeners();
}
Все остальное просто создает объекты Preference и назначает методы для выполнения действий, когда на них нажимают. Я не хочу делать код для PreferenceFragment и PreferenceActivity. Я не понимаю, как Google ожидает, что мы будем использовать API-интерфейсы фрагментов, если на самой большой версии markethare этого API нет, и они не добавят его в библиотеку совместимости.
1 ответ
Ваше приложение может поддерживать как старые, так и новые функции SharedPreferences. Вы можете указать класс для старых настроек и класс для новых. Это не намного больше кода. Вы можете сделать ваше приложение обратно совместимым, как это:
Class spc = Build.VERSION_SDK_INT < Build.VERSION_CODES.HONEYCOMB ?
oldPreferenceActivity.class : newFragmentPreferenceActivity.class;
Intent i = new Intent (this, spc);
startActivityForResult (i, SHOW_PREFERENCES);