Estoy tratando de obtener la altura de ActionBar
(usando Sherlock) cada vez que se crea una actividad (especialmente para manejar los cambios de configuración en la rotación donde la altura de ActionBar podría cambiar).
Para esto utilizo el método ActionBar.getHeight()
que funciona solo cuando ActionBar
se muestra.
Cuando se crea la primera actividad por primera vez, puedo llamar getHeight()
a la onCreateOptionsMenu
devolución de llamada. Pero este método no se llama después.
Entonces, mi pregunta es cuándo puedo llamar a getHeight () y estar seguro de que no devuelve 0. O si no es posible, ¿cómo puedo configurar la altura de la barra de acciones?
En XML, debe usar este atributo:
fuente
android.support.v7.appcompat.R.attr.actionBarSize
. Si desea utilizarlo en xml diseño,android:paddingTop="?attr/actionBarSize"
. Funciona bien en todas partes.Ok, busqué en Google y llegué a esta publicación varias veces, así que creo que será bueno que me describan no solo para Sherlock sino también para appcompat:
Altura de la barra de acción con appCompat
Bastante similar a la descripción de @Anthony, puede encontrarlo con el siguiente código (acabo de cambiar la identificación del recurso):
Problema Pre Sandwitch
Necesitaba la altura de la barra de acción porque en dispositivos pre ICE_CREAM_SANDWITCH mi vista se superponía a la barra de acción. Intenté configurar android: layout_marginTop = "? Android: attr / actionBarSize", android: layout_marginTop = "? Attr / actionBarSize", configurando la superposición desactivada para ver / barra de acción e incluso altura de barra de acción fija con tema personalizado pero nada funcionó. Así se veía:
Desafortunadamente, descubrí que con el método descrito anteriormente obtengo solo la mitad de la altura (supongo que la barra de opciones no está en su lugar), así que para solucionar completamente el problema, necesito duplicar la altura de la barra de acción y todo parece estar bien:
Si alguien conoce una mejor solución (que doblar actionBarHeight), me alegrará avisarme cuando vengo del desarrollo de iOS y encontré que la mayoría de las cosas de la vista de Android son bastante confusas :)
Saludos,
hris.to
fuente
ActionBar.getHeight()
. Dependiendo de la situación, eso también puede funcionar para usted.layout_gravity="center_vertical"
? Cámbialo a"bottom"
. Android 2.3 maneja el margen en FrameLaoyut de manera diferente a los androides más nuevos.La respuesta @Anthony funciona para dispositivos que admiten
ActionBar
y para aquellos dispositivos que solo admiten elSherlock Action Bar
siguiente métodofuente
com.actionbarsherlock.R.attr.actionBarSize
trabajé para Android 2.3 y 4.0, por lo que parece que puedes usar esto independientemente de la versión de Android.Creo que la forma más segura sería:
fuente
else if (true == getTheme().resolveAttribute( android.support.v7.appcompat.R.attr.actionBarSize, tv, true)) { actionBarHeight = TypedValue.complexToDimensionPixelSize( tv.data,getResources().getDisplayMetrics()); }
Para establecer la altura de
ActionBar
usted puede crear nuevosTheme
como este:y configura esto
Theme
a tuActivity
:fuente
Java:
xml:
fuente
Si está utilizando una barra de herramientas como la barra de acciones,
entonces simplemente use el layout_height de la barra de herramientas.
fuente
puedes usar esta función para obtener la altura de la barra de acción.
fuente
Este método de ayuda debería ser útil para alguien. Ejemplo:
int actionBarSize = getThemeAttributeDimensionSize(this, android.R.attr.actionBarSize);
fuente
solo tienes que agregar esto.
fuente
Encontré una forma más genérica de descubrirlo:
donde ' mainView ' es la vista raíz de su diseño.
La idea es básicamente obtener la posición Y de mainView, ya que se establece justo debajo de la barra de acciones (o barra de herramientas).
fuente
La altura de la barra de acción difiere según el tema aplicado. Si estás usando AppCompatActivity la altura será diferente en la mayoría de los casos de la Actividad normal.
Si está utilizando AppCompatActivity , debe usar R.attr.actionBarSize en lugar de android.R.attr.actionBarSize
fuente
En xml, puede usar? Attr / actionBarSize, pero si necesita acceder a ese valor en Java, debe usar el siguiente código:
fuente
Un método listo para cumplir con la respuesta más popular:
fuente
Aquí hay una versión actualizada con Kotlin que utilicé suponiendo que el teléfono sea más alto que Honeycomb:
fuente
Si está utilizando Xamarin / C #, este es el código que está buscando:
fuente
fuente
Una forma sencilla de encontrar la altura de la barra de acción es desde el
onPrepareOptionMenu
método Actividad .fuente
En javafx (usando Gluon), la altura se establece en tiempo de ejecución o algo similar. Si bien puede obtener el ancho como de costumbre ...
double width = appBar.getWidth();
Tienes que crear un oyente:
GluonApplication application = this;
... Y tome el valor más reciente al que cambió. Para obtener la altura.
fuente
Después de probar todo lo que está ahí fuera sin éxito, descubrí, por accidente, una forma funcional y muy fácil de obtener la altura predeterminada de la barra de acción.
Solo probado en API 25 y 24
C#
Java
fuente