He visto barras de aplicaciones de altura extendida en las pautas de la barra de aplicaciones de diseño de Google . ¿Cómo implemento estos en Android Lollipop?
He visto barras de aplicaciones de altura extendida en las pautas de la barra de aplicaciones de diseño de Google . ¿Cómo implemento estos en Android Lollipop?
Respuestas:
Necesita utilizar el nuevo widget de la barra de herramientas para lograr esto. La barra de herramientas tiene un manejo especial para su altura mínima para declarar la cantidad de espacio que se usa para botones (y acciones).
En el siguiente ejemplo, estamos configurando la altura en 128dp (que es 56dp + 72dp como se define en la especificación), pero manteniendo android:minHeight
como estándar actionBarSize
(que generalmente es 56dp). Esto significa que los botones y acciones están restringidos para colocarse verticalmente en los 56dp superiores. Luego podemos usar android:gravity
para colocar el título en la parte inferior.
<Toolbar
android:id="@+id/toolbar"
android:layout_height="128dp"
android:layout_width="match_parent"
android:minHeight="?android:attr/actionBarSize"
android:background="?android:attr/colorPrimary"
android:gravity="bottom" />
Si está usando AppCompat, cambie la declaración para usar android.support.v7.widget.Toolbar
en su lugar y use sus atributos.
@dimen/action_bar_size_x2
, cambie el tamaño de la barra de acción usando incrementos, por ejemplo , y use 112dp en teléfonos, 128dp en tabletas
android:paddingBottom
introduce un espaciado extraño cuando buttonGravity
se establece en bottom
. El titleMarginBottom
atributo parece la mejor opción aquí, ¿no?
Gracias por tu pregunta, su respuesta y además por la implementación de la barra de herramientas en la biblioteca nativa y de soporte :)
Y podemos jugar más. Podemos, en tiempo de ejecución, jugar con la altura y la altura mínima.
La altura es la altura de la barra de herramientas, es simple, todos los cuerpos lo entienden y la gravedad actúa de acuerdo con esa altura.
La altura mínima es más complicada y no debe tener un mínimo de 56 dp. Este minHeight se utiliza para colocar la línea de su menuItem. Esta línea está en el medio de su minHeight.
Entonces puedes agregar este código a tu actividad para ver por ti mismo la diferencia. :)
Runnable toolBarAnimator=new Runnable() {
@Override
public void run() {
if(postICS){
// toolbar.setTranslationX(iteration);
// toolbar.setElevation(iteration);
toolbar.setMinimumHeight(iteration * 5);
toolbar.getLayoutParams().height++;
}
uiThreadHanlder.postDelayed(this,16);
iteration++;
if(iteration>150)iteration=0;
}
};
Handler uiThreadHanlder=new Handler();
int iteration=0;
@Override
protected void onResume() {
super.onResume();
//launch the animation
uiThreadHanlder.postDelayed(toolBarAnimator, 1000);
}
@Override
protected void onPause() {
super.onPause();
//stop the animation
uiThreadHanlder.removeCallbacks(toolBarAnimator);
}
Donde la barra de herramientas es:
barra de herramientas = (Barra de herramientas) findViewById (R.id.toolbar);
Al hacer esto obtienes:
pero si dejas la animación continuar obtienes:
Por eso, configurar tu barra de herramientas android: layout_height en wrap_content es una buena opción en la mayoría de los casos, porque la barra de herramientas adaptará su altura de acuerdo con su contenido (y puedes cambiar el contenido en tiempo de ejecución :)
Y así es también como cambia el tamaño de la barra de herramientas en tiempo de ejecución.
Gracias Chris Banes por el increíble trabajo que hiciste en la barra de acción.
boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
layout_height
es el camino a seguir, espero que la solución descrita por monzón aquí tampoco sea una solución, pero ¿la manera correcta de hacerlo? code.google.com/p/android/issues/detail?id=77874