Android: Split ActionBar altura del padre real
Utilizo la barra de acción (origen androide, no ABS) y posiciono mis vistas relativamente en el diseño raíz ( RelativeLayout
). Para calcular la posición relativa en la pantalla utilicé los getParent().getHeight()
/ getParent().getWidth()
de mi vista. Con la ActionBar normal funciona bien. Obtengo la altura real del padre (altura de la actividad – altura de la barra de acción, por ejemplo 690px en la pantalla de 800 píxeles). Pero si uso la opción splitActionBarWhenNarrow
y la barra inferior se muestra, obtengo la misma altura del padre (por ejemplo, 690px en la pantalla de 800px). Por lo tanto, algunas de mis ventanas posicionadas mediante programación están bajo la barra de acción inferior.
¿Cómo puedo obtener la altura real del padre, sin las barras de acción?
- Android ScrollView no funciona correctamente
- AlignParentBottom + marginBottom no trabajando juntos
- Agregar imagen de forma programada a RelativeLayout
- Establece el ancho de relativelayout 1/3 del ancho de la pantalla?
- ¿Por qué recibo una CircularDependencyException?
Editar:
Leo el ancho y la altura de los onWindowFocusChanged
en el método onWindowFocusChanged
de la actividad.
- ¿Por qué se ignora layout_marginBottom cuando se usa wrap_content?
- android obtener todas las sub-vistas de una vista
- OnClickListener no funciona con el atributo que se puede hacer clic
- Tener un EditText sobre un teclado suave con una vista GL en el fondo mediante programación
- Repita la imagen con ImageView en RelativeLayout
- ImageView rellena el ancho o altura de los padres, pero mantiene la relación de aspecto
- Escala la imagen de fondo para ajustar el contenido del diseño
- Cómo rotar un RelativeLayout por 180 grados?
Tanto la barra de acción superior como la inferior son de la misma altura. Por lo que sé, no puede solicitar el tamaño de la barra de acción mediante programación. Esta publicación da un ejemplo de cómo establecer la altura de la barra de acción con un estilo para que sea coherente.
Para determinar si se ha dividido o no la barra de acción, debe calcularla manualmente. Según las pautas del diseño (cerca de la parte inferior)
¿Cuántas acciones caben en la barra de acción principal? La capacidad de la barra de acción se controla mediante las siguientes reglas:
- Los botones de acción en la barra de acción principal no pueden ocupar más del 50% del ancho de la barra. Los botones de acción de las barras de acción inferiores pueden utilizar todo el ancho.
El ancho de la pantalla en píxeles independientes de la densidad (dp) determina el número de elementos que caben en la barra de acción principal:
más pequeño que 360 dp = 2 iconos
360-499 dp = 3 iconos
500-599 dp = 4 iconos
600 dp y mayor = 5 iconos
Ejemplo:
Así que quieres hacer algo como esto.
DisplayMetrics displayMetrics = new DisplayMetrics(); Display display = getWindowManager().getDefaultDisplay(); display.getMetrics(displayMetrics); float density = displayMetrics.density; // width in dp float width = (displayMetrics.widthPixels / density); // I will assume you have 3 action bar icons if (width < 360) { // 2 menu items fit. // Calculate action bar height with 2*(actionbar height) // to accommodate the bottom action bar. } else { // 3+ menu items fit // Calculate action bar height with 1*(actionbar height). }
¿Y cómo puedo detectar si la barra de acción está dividida o no?
Sencillo. Utiliza valores booleanos. Por defecto, tendrás una ActionBar dividida si el ancho de la pantalla es menor que 400dp. Ya hay uno declarado (que es el que utiliza la ActionBar para determinar si se trata de un dispositivo de teléfono o una tableta). Si está orientado a Android HC +, puede acceder al valor predeterminado de ActionBars: android.R.bool.split_action_bar_is_narrow
, si está utilizando ActionBarSherlock: R.bool.abs_split_action_bar_is_narrow
. Encontrado aquí para el ActionBar por defecto, aquí su ABS.
Ahora puede acceder al valor booleano de la siguiente manera:
boolean isActionBarSplitted = getResources().getBoolean(R.bool.split_action_bar); if(isActionBarSplitted){ // Parent height - SplitActionBar height } else{ // No Split ActionBar }
Tenga en cuenta que android.R.bool.split_action_bar_is_narrow
es un recurso interno, por lo que tiene que hacerlo funcionar como se describe aquí .
- Creando el menú de opciones android fondo de la página en android
- Numberpicker lanza ArrayIndexOutOfBoundsException al desplazarse por los valores