2012-09-26 11 views
5

Estoy escribiendo una aplicación. Tiene que ejecutarse en el viejo sistema operativo Android para que sea útil. He escrito la pantalla de preferencias usando una actividad de preferencias que se completa con un archivo options.xml que contiene PreferenceScreen. No tiene submenú para preferencias (por lo que PreferenceFragment no proporciona beneficios reales).PreferenceActivity funciona correctamente en Android 2.1, pero no 4.1 (relleno)

En Android 2.1 (2.2 y 2.3, no se han probado en el ICS todavía) la pantalla muestra correctamente como tal en el paisaje: Eclair

Pero en Jellybean, que se ve así: Jellybean

Se ve terrible. No tengo nada definido como un diseño, solo estándar addPreferencesFromResource(). ¿Alguien sabe cuál es la causa de esto? O una solución?

Mi onCreate se ve así:

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

Todo lo demás sólo hace que los objetos de preferencias y asigna métodos para hacer cosas cuando se hace clic. No quiero hacer código para PreferenceFragment y PreferenceActivity. No entiendo cómo Google espera que usemos Fragment APIs si la versión más grande de marketshare no tiene esa API y no la agregará a la lib de compatibilidad.

+0

Creo que las pantallas de preferencias de ICS/JB tienen ese relleno. No estoy seguro de que haya una manera de eliminarlo, pero no estoy dando una respuesta definitiva (es por eso que acabo de comentar.) – Jwc24678

+0

Voy a descartar que ['addPreferencesFromResource()'] (http://developer.android.com/reference/android/preference/PreferenceActivity.html#addPreferencesFromResource(int) está en desuso. Probablemente el uso de los métodos aún compatibles (detallados en esa página de documentos) en 4.0+ le proporcione los resultados adecuados. – Eric

+0

Esperando evitar esos ... Pero podría tener que rendirse y hacerlo de todos modos. No entiendo por qué no lo harían totalmente compatible. No hay razón para el relleno. – Mgamerz

Respuesta

1

Su aplicación puede admitir tanto la funcionalidad antigua como la nueva para SharedPreferences. Puede proporcionar una Clase para las preferencias anteriores y una Clase para las nuevas. No es mucho más código. Puede hacer que su aplicación sea compatible con versiones anteriores como esta:

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

Intent i = new Intent (this, spc); 
startActivityForResult (i, SHOW_PREFERENCES); 
Cuestiones relacionadas