Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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.

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).

  • Animación FAB con viewpager / tabslider
  • ¿Cómo puedo implementar una Lista de Expandir / Contraer el Material de Diseño en Android?
  • Barra de estado El color no cambia con Disposición relativa como elemento raíz
  • Creación de un menú de diálogo emergente personalizado
  • ¿Cómo hacer que el menú emergente de desbordamiento evite obstruir la barra de acción?
  • ¿Cómo habilitar o falsificar la mini variante de la guía de diseño de materiales para android.support.v4.widget.DrawerLayout?
  • Android Support Design TabLayout: Centro de Gravedad y Modo Scrollable
  • Cambiar diseño de material AppCompat ActionBar Color
  • 2 Solutions collect form web for “Cambiar la altura de AppBarLayout por programa en Android”

    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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.