La compatibilidad de Action Bar se ha agregado a la biblioteca de soporte, revisión 18. Ahora tiene ActionBarActivity
clase para crear actividades con Action Bar en versiones anteriores de Android.
¿Hay alguna forma de agregar Action Bar desde la biblioteca de soporte PreferenceActivity
?
Anteriormente utilicé ActionBarSherlock y lo ha hecho SherlockPreferenceActivity
.
Respuestas:
EDITAR: En appcompat-v7 22.1.0, Google agregó la clase abstracta AppCompatDelegate como delegado que puede usar para extender el soporte de AppCompat a cualquier actividad.
Úselo así:
No más pirateo. Código tomado de AppCompatPreferenceActivity.java .
fuente
(ViewGroup) getWindow().getDecorView().getRootView()
Actualmente no hay forma de lograrlo con AppCompat. He abierto un error internamente.
fuente
PreferenceActivity
que nos agreguenActionBarCompat
?He logrado crear una solución similar a la que usa Google Play Store. Enlace a la respuesta original
Encuentre el repositorio de GitHub: aquí
Muy similar a su propio código, pero agregó xml para permitir establecer el título:
Continuando con el uso
PreferenceActivity
:settings_toolbar.xml :
SettingsActivity.java :
Result :
ACTUALIZACIÓN (compatibilidad de pan de jengibre):
Como se señaló aquí , los dispositivos Gingerbread están devolviendo NullPointerException en esta línea:
REPARAR:
SettingsActivity.java :
Cualquier problema con lo anterior, hágamelo saber!
ACTUALIZACIÓN 2: SOLUCIÓN DE TINTADO
Como se señala en muchas notas de desarrollo
PreferenceActivity
, no admite el tinte de elementos, sin embargo, al utilizar algunas clases internas, PUEDE lograr esto. Eso es hasta que se eliminen estas clases. (Funciona con appCompat support-v7 v21.0.3).Agregue las siguientes importaciones:
Luego anule el
onCreateView
método:Result:
AppCompat 22.1
AppCompat 22.1 introdujo nuevos elementos teñidos, lo que significa que ya no es necesario utilizar las clases internas para lograr el mismo efecto que la última actualización. En cambio, siga esto (aún anulando
onCreateView
):PANTALLAS DE PREFERENCIA ANIDADA
<PreferenceScreen />
Sin embargo, muchas personas están experimentando problemas al incluir la barra de herramientas en correos anidados , ¡he encontrado una solución! - ¡Después de mucho ensayo y error!Agregue lo siguiente a su
SettingsActivity
:La razón por la cual
PreferenceScreen
es tan difícil es porque se basan en un diálogo de contenedor, por lo que debemos capturar el diseño del diálogo para agregarle la barra de herramientas.Barra de herramientas de sombra
Por diseño, la importación
Toolbar
no permite la elevación y el sombreado en dispositivos anteriores a v21, por lo que si desea tener elevación en suToolbar
, debe envolverlo en unAppBarLayout
:`settings_toolbar.xml:
Sin olvidar agregar el agregar la biblioteca de soporte de diseño como una dependencia en el
build.gradle
archivo:Android 6.0
He investigado el problema de superposición informado y no puedo reproducirlo.
El código completo en uso como el anterior produce lo siguiente:
Si me falta algo, hágamelo saber a través de este repositorio e investigaré.
fuente
:)
PreferenceActivity
tan difícil de usar ? Se supone que ahorra tiempo. También podría hacer una actividad regular y diseñar manualmente todas las configuraciones en un diseño lineal. ¡Fuuuuck!Se encontró una implementación de PreferenceFragment basada en el fragmento support-v4
https://github.com/kolavar/android-support-v4-preferencefragment
Editar: ¡Acabo de probarlo y funciona muy bien!
fuente
La integración
PreferenceActivity
con ABC no es posible, al menos para mí. Probé las dos posibilidades que pude encontrar pero ninguna funcionó:Opción 1:
ActionBarPreferenceActivity
se extiendePreferenceActivity
. Cuando haces esto te restringenActionBarActivityDelegate.createDelegate(ActionBarActivity activity)
. También necesitas implementarActionBar.Callbacks
que no es accesibleOpcion 2:
ActionBarPreferenceActivity
se extiendeActionBarActivity
. Este enfoque requiere la reescritura de una versión completamente nuevaPreferenceActivity
,PreferenceManager
y puede ser loPreferenceFragment
que significa que necesita acceso a clases ocultas comocom.android.internal.util.XmlUtils
La solución a esto solo puede provenir de los desarrolladores de Google que implementen unaActionBarWrapper
que se pueda agregar a cualquier actividad.Si realmente necesita una actividad preferencial, mi consejo por ahora es
ActionBarSherlock
.Sin embargo, logré implementarlo aquí .
fuente
Antecedentes del problema:
El PO quiere saber cómo podemos poner
MenuItem
s en elActionBar
dePreferenceActivity
pre-nido de abeja debido biblioteca de soporte de Android tiene un error que no permite que esto suceda.Mi solución:
He encontrado una forma mucho más limpia, de lo que ya se propuso, para lograr el objetivo (y lo encontré en los Documentos de Android ):
Ahora haz lo que normalmente harías en tu
onOptionsItemSelected()
. Como es parte de Android Docs, no tiene efectos secundarios.Feliz codificación :)
Actualizar:
Esta solución ya no funciona si estás apuntando a Lollipop. Si está utilizando AppCompat, esta respuesta es lo que debería estar buscando.
fuente
PreferencesActivity
no habría forma de colocar elementosActionBar
, especialmente el botón de retroceso. Mi respuesta es una buena solución para eso.:)
Pude llegar
android.app.Actionbar
usandogetActionBar()
. Al principio devolvió un valor nulo ... luego fui al manifiesto y cambié el tema a:Luego pude volver a tener la barra de acción. Supongo que esto solo funcionará para ciertos niveles de compilación. Por lo tanto, es posible que desee verificar el número de compilación o verificar si el valor devuelto es nulo.
Estaré bien para mí porque la aplicación en la que estoy trabajando es para
ICS/4.0
+.fuente
Ahora se ha publicado la respuesta oficial a este problema. Es el soporte de preferencias v7 / v14 biblioteca de .
Consulte ¿Cómo usar la biblioteca de soporte de preferencias v7 / v14? para la discusión sobre cómo usarlo.
fuente