2012-09-26 111 views
5

我在寫應用程序。它需要運行在舊的Android操作系統上纔能有用。我使用PreferencesActivity編寫了首選項屏幕,該PreferencesActivity使用包含PreferenceScreen的options.xml文件填充。它沒有偏好的子菜單(所以PreferenceFragment沒有提供真正的好處)。PreferenceActivity在Android 2.1上正常工作,但不是4.1(填充)

在Android 2.1系統中的風景(2.2和2.3,也沒有對ICS測試過),屏幕顯示正常,像這樣: Eclair

但在傑利貝恩,它看起來像這樣: 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製作代碼。我不明白谷歌如何期望我們使用Fragment APIs,如果最大版本marketshare沒有這個API,他們不會將它添加到兼容性庫。

+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); 
相關問題