2012-09-26 1 views
5

Я пишу приложение. Он должен работать на старых ОС Android, чтобы быть полезным. Я написал экран настроек, используя PreferencesActivity, который заполняется файлом options.xml, который содержит PreferenceScreen. У него нет подменю для предпочтений (поэтому PreferenceFragment не дает никаких реальных преимуществ).PreferenceActivity работает правильно на Android 2.1, но не 4.1 (дополняется)

В Android 2.1 (2.2 и 2.3, которые не тестируется на ICS пока) на экране отображается правильно как и в пейзаже: Eclair

Но на Jellybean, это выглядит следующим образом: 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(); 
} 

Все остальное просто делает объекты предпочтений и присваивает методы, чтобы сделать вещи, когда они получают щелкнули. Я не хочу создавать код для PreferenceFragment и PreferenceActivity. Я не понимаю, как Google ожидает, что мы будем использовать API-интерфейсы Fragment, если у самой большой версии markethare нет этого API, и они не добавят его в lib.

+0

Я чувствую, что экраны предпочтений ICS/JB имеют это дополнение. Я не уверен, что есть способ удалить его, но я не принимаю окончательный ответ (вот почему я просто прокомментировал.) – Jwc24678

+0

Я просто выброшу туда, что ['addPreferencesFromResource()'] (http://developer.android.com/reference/android/preference/PreferenceActivity.html#addPreferencesFromResource(int)) устарел. Вероятно, использование поддерживаемых методов (подробная информация на этой странице документации) на 4.0+ даст вам правильные результаты. – Eric

+0

В надежде избежать этих ... Но, возможно, придется сдаться и сделать это в любом случае. Я не понимаю, почему они не будут полностью совместимы. Нет никаких оснований для заполнения. – Mgamerz

ответ

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); 
Смежные вопросы