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); 
Другие вопросы по тегам