2012-09-26 12 views
5

Piszę aplikację. Musi działać na starych systemach Android, aby były przydatne. Napisałem ekran preferencji za pomocą PreferencesActivity, który wypełnia plik options.xml, który zawiera PreferenceScreen. Nie ma podmenu dla preferencji (więc PreferenceFragment nie zapewnia żadnych rzeczywistych korzyści).PreferenceActivity działa poprawnie na systemie Android 2.1, ale nie 4.1 (wyściełane)

W Android 2.1 (2.2 i 2.3, nie zostały jeszcze przetestowane na ICS) na ekranie wyświetla się prawidłowo, tak jak w krajobrazie: Eclair

Ale Jellybean, wygląda to tak: Jellybean

Wygląda okropnie. Nie mam nic zdefiniowanego jako layout, tylko standard addPreferencesFromResource(). Czy ktoś wie, jaka może być tego przyczyna? Lub rozwiązanie?

My onCreate wygląda następująco:

protected void onCreate(Bundle savedInstanceState) { // 
    super.onCreate(savedInstanceState); 
    Log.i(TAG, "Options Activity Loaded."); 
    setTitle(getString(R.string.optionsTitle)); 
    addPreferencesFromResource(R.xml.options); 
    setupListeners(); 
} 

Wszystko inne po prostu sprawia, że ​​przedmioty preferencji i przypisuje metod robić rzeczy, kiedy są kliknięciu. Nie chcę tworzyć kodu zarówno dla PreferenceFragment, jak i PreferenceActivity. Nie rozumiem, w jaki sposób Google oczekuje od nas używania fragmentów API Fragmentów, jeśli największa wersja marketshare nie ma tego API i nie doda go do biblioteki zgodności.

+0

Czuję ekranach uprzywilejowanych ICS/JB że mają wyściółki. Nie jestem naprawdę pewien, istnieje sposób, aby go usunąć, ale nie jestem podejmowania ostatecznej odpowiedzi (dlatego właśnie skomentowałem.) – Jwc24678

+0

Po prostu wyrzucę tam, że [addPreferencesFromResource() '] (http://developer.android.com/reference/android/preference/PreferenceActivity.html#addPreferencesFromResource)) jest przestarzałe. Prawdopodobnie używanie nadal obsługiwanych metod (opisanych na tej stronie) na 4.0+ przyniesie Ci właściwe wyniki. – Eric

+0

Mając nadzieję na ominięcie tych ... Ale może i tak musielibyśmy się poddać i zrobić to. Nie rozumiem, dlaczego nie byliby w pełni zgodni. Nie ma powodu do wyściełania. – Mgamerz

Odpowiedz

1

Twoja aplikacja może obsługiwać zarówno starą, jak i nową funkcjonalność dla SharedPreferences. Możesz podać klasę dla starych preferencji i klasę dla nowych. To niewiele więcej kodu. Można dokonać aplikacja wstecznie kompatybilne tak:

Class spc = Build.VERSION_SDK_INT < Build.VERSION_CODES.HONEYCOMB ? 
    oldPreferenceActivity.class : newFragmentPreferenceActivity.class; 

Intent i = new Intent (this, spc); 
startActivityForResult (i, SHOW_PREFERENCES); 
Powiązane problemy