Java 在Android中以编程方式更改AppBarLayout高度
我正在尝试使用图像模式实现灵活的空间 一切正常 请注意AppBarLayout的高度定义为192dp 我想将屏幕的高度改为1/3,以便匹配 以下是活动的onCreate中的代码(布局xml与教程中的完全相同): 但由于某些原因,结果并不是我所期望的。使用此代码,我根本看不到应用程序栏。(如果没有代码,高度将按预期显示,但它来自XML,无法动态设置)。请执行以下操作:Java 在Android中以编程方式更改AppBarLayout高度,java,android,android-5.0-lollipop,material-design,appbar,Java,Android,Android 5.0 Lollipop,Material Design,Appbar,我正在尝试使用图像模式实现灵活的空间 一切正常 请注意AppBarLayout的高度定义为192dp 我想将屏幕的高度改为1/3,以便匹配 以下是活动的onCreate中的代码(布局xml与教程中的完全相同): 但由于某些原因,结果并不是我所期望的。使用此代码,我根本看不到应用程序栏。(如果没有代码,高度将按预期显示,但它来自XML,无法动态设置)。请执行以下操作: AppBarLayout appbar = (AppBarLayout) findViewById(R.id.appbar
AppBarLayout appbar = (AppBarLayout) findViewById(R.id.appbar);
float heightDp = getResources().getDisplayMetrics().heightPixels / 3;
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appbar.getLayoutParams();
lp.height = (int)heightDp;
在您的原始代码中,我认为您对屏幕1/3的计算是错误的,但您仍然应该看到一些东西。可能是setLP()中的LayoutParams.MATCH_父项未正确导入。始终首先声明视图类型,即CoordinatorLayout.LayoutParams以确保。否则,可以很容易地使用Framelayout.LayoutParams,例如。通过除以、百分比或按屏幕高度的重量编程更改AppBarLayout高度的一些方法:
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);
}
}
如果要遵循材质设计准则,高度应等于默认高度加上内容增量
应该是这样吗?:float density=mParentActivity.getResources().getDisplayMetrics().density;float heightDp=mParentActivity.getResources().getDisplayMetrics().heightPixels/density;
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);
}
}