Cambiar la altura de AppBarLayout por programa en Android
Estoy intentando implementar el espacio flexible con el patrón de la imagen, usando este tutorial .
Todo funciona bien.
- ¿Es posible alinear a la izquierda SearchView en AppCompat 21 con la barra de herramientas?
- Android AppCompat-v21 vs Material puro
- AppCompat Snackbar no centrado en la tableta
- ¿Cómo puedo eliminar el relleno superior innecesario de la vista de navegación?
- Comunicación entre las pestañas de SlidingTabLayout
Observe la definición de altura de AppBarLayout que es 192dp.
Me gustaría hacer la altura 1/3 de la pantalla en lugar, para que coincida con este ejemplo de google para el patrón aquí .
Aquí está el código en la actividad onCreate (el layout xml es exactamente el mismo que en el tutorial):
AppBarLayout appbar = (AppBarLayout)findViewById(R.id.appbar); float density = getResources().getDisplayMetrics().density; float heightDp = getResources().getDisplayMetrics().heightPixels / density; appbar.setLayoutParams(new CoordinatorLayout.LayoutParams(LayoutParams.MATCH_PARENT, Math.round(heightDp / 3)));
Pero por alguna razón, el resultado no es lo que estoy esperando. No puedo ver la barra de aplicaciones en absoluto con este código. (Sin el código, la altura se muestra como se espera, pero es de XML y no se puede establecer dinámicamente).
- Tema no aplicado con la biblioteca appcompat en algunos dispositivos Android 4.X
- Botón sin bordes en Pre-Lollipop con la biblioteca de soporte
- Iconos de diseño de material
- Cómo personalizar el campo EditText en android utilizando AppCompat v7: 21
- Lista completa de los atributos del tema de color del material
- ¿Cómo implementar el diseño del material con la disposición de restricciones?
- Elevación del Lollipop en contorno cóncavo
- Barra de estado El color no cambia con Disposición relativa como elemento raíz
Haga esto en su lugar:
AppBarLayout appbar = (AppBarLayout) findViewById(R.id.appbar); float heightDp = getResources().getDisplayMetrics().heightPixels / 3; CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appbar.getLayoutParams(); lp.height = (int)heightDp;
En su código original creo que el cálculo de 1/3 de la pantalla estaba mal, pero aún así debería haber visto algo. Podría ser que LayoutParams.MATCH_PARENT en el setLP () no se haya importado correctamente. Siempre declare el tipo de vista primero, es decir CoordinatorLayout.LayoutParams sólo para asegurarse. De lo contrario, puede ser fácil de usar un Framelayout.LayoutParams, por ejemplo.
Algunos métodos para cambiar la altura de AppBarLayout de forma programática con la división, el porcentaje o el peso de la altura de la pantalla:
private AppBarLayout appbar; /** * @return AppBarLayout */ @Nullable protected AppBarLayout getAppBar() { if (appbar == null) appbar = (AppBarLayout) findViewById(R.id.appbar); return appbar; } /** * @param divide Set AppBar height to screen height divided by 2->5 */ protected void setAppBarLayoutHeightOfScreenDivide(@IntRange(from = 2, to = 5) int divide) { setAppBarLayoutHeightOfScreenPercent(100 / divide); } /** * @param percent Set AppBar height to 20->50% of screen height */ protected void setAppBarLayoutHeightOfScreenPercent(@IntRange(from = 20, to = 50) int percent) { setAppBarLayoutHeightOfScreenWeight(percent / 100F); } /** * @param weight Set AppBar height to 0.2->0.5 weight of screen height */ protected void setAppBarLayoutHeightOfScreenWeight(@FloatRange(from = 0.2F, to = 0.5F) float weight) { if (getAppBar() != null) { ViewGroup.LayoutParams params = getAppBar().getLayoutParams(); params.height = Math.round(getResources().getDisplayMetrics().heightPixels * weight); getAppBar().setLayoutParams(params); } }
Si desea seguir las directrices de diseño del material, la altura debe ser igual a la altura predeterminada más los incrementos de contenido https://www.google.com/design/spec/layout/structure.html#structure-app-bar
- No se puede implementar la aplicación mediante Device Chooser después de actualizar Android Studio a 1.4
- Obtener álbum con el nombre del álbum Android