以编程方式设置工具栏高度Android

我想通过这种方式编程设置工具栏的高度:

toolbar.setLayoutParams(new Toolbar.LayoutParams(LayoutParams.MATCH_PARENT, 42)); toolbar.setMinimumHeight(42); 

但它会导致这个日志的致命exception – > android.widget.relativelayout$layoutparams cannot be cast to android.support.v7.Toolbar$layoutparams

我也尝试这个变种:

 RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) toolbar.getLayoutParams(); params.height = 42; toolbar.setLayoutParams(params); toolbar.setMinimumHeight(42); 

它没有给出例外,但也不起作用,工具栏获取默认更大的高度,而不是我定义的。 但当然在xml设置参数的作品,但我也需要在java中设置高度。

所以请帮我解决这个问题。

尝试这个 –

 RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mToolbar.getLayoutParams(); layoutParams.height = 42; mToolbar.setLayoutParams(layoutParams); 

这对我来说可以。

如果上面的代码仍然不起作用,请尝试在最后添加此行 –

 mToolbar.requestLayout(); 

上面的行将强制您的工具栏重新测量一切。 您的代码可能无法正常工作,因为您在布局充气后尝试更改高度。 在这种情况下,你需要强制你的视图重新测量一切。 看看下面的方法更多的信息 – requestLayout(),invalidate()和forceLayout()。 在改变LayoutParams的同时,这三种方法很方便,但价格很高。 如果您的布局非常沉重,并且有很多子视图,则调用这些方法中的任何一种都会影响您的应用在低端设备上的性能。 所以确保你真的很小心地使用这些方法。

你提到的崩溃是因为你的工具栏是你的根视图的子视图,你的根视图是RelativeLayout。 希望能帮助到你。

也请不要按照Silambarasan Poonguti的回答那样模棱两可。 如果您尝试访问子LayoutParams,则需要LayoutParams转换。 即使视图有它自己的LayoutParams,你必须将它转换为父或根的LayoutParams为前。 如果您的工具栏是RelativeLayout的子视图,那么将LayoutParams转换为Toolbar.LayoutParams会使应用程序崩溃,您必须将LayoutParams转换为RelativeLayout.LayoutParams

尝试这个…

工具栏有自己的LayoutParams 。 你不能将它转换为RelativeLayout。

  Toolbar.LayoutParams params = (Toolbar.LayoutParams)mToolbar.getLayoutParams(); params.height = 42; mToolbar.setLayoutParams(params); 

如果你想在运行时设置工具栏的高度只需要这样做,

  int expected_height = your value; mToolbar.setMinimumHeight(expected_height ); 

快乐编码…

为了避免这个错误,你需要使用ViewGroup.LayoutParams ,因为android.support.v7.Toolbar和它一起工作并在mToolbar.getLayoutParams().上返回它mToolbar.getLayoutParams().