我试图通过这种方式以编程方式设置工具栏的高度:
${date}
但是这个日志会导致致命的异常 - > toolbar.setLayoutParams(new Toolbar.LayoutParams(LayoutParams.MATCH_PARENT, 42));
toolbar.setMinimumHeight(42);
我也试过这个变种:
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);
中设置参数是有效的,但我也需要在java中设置高度。
所以请帮我解决问题。
答案 0 :(得分:15)
试试这个 -
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mToolbar.getLayoutParams();
layoutParams.height = 42;
mToolbar.setLayoutParams(layoutParams);
它适用于我。
如果上面的代码仍然不起作用,请尝试在最后添加此行 -
mToolbar.requestLayout();
以上行会强制您的工具栏重新测量所有内容。您的代码可能无法正常工作,因为您试图在布局膨胀后更改高度。在这种情况下,您需要强制View重新测量所有内容。请查看以下方法以获取更多信息 - requestLayout(),invalidate()和forceLayout()。在改变LayoutParams的同时,这三种方法都很方便但价格很高。如果您的布局非常繁重且包含大量子视图,则调用这些方法中的任何一种都会影响应用程序的性能,特别是在低端设备上。因此,请务必仔细使用这些方法。
您提到的崩溃正在发生,因为您的工具栏是根视图的子视图,而您的根视图是RelativeLayout。希望它有所帮助。
另外请不要按照Silambarasan Poonguti的回答,因为它有点含糊不清。如果您尝试访问子LayoutParams,则需要进行LayoutParams转换。即使View有自己的LayoutParams,你必须将它转换为父或根LayoutParams。如果您的工具栏是RelativeLayout的子视图,那么将LayoutParams转换为Toolbar.LayoutParams会使应用程序崩溃,您必须将LayoutParams强制转换为RelativeLayout.LayoutParams
答案 1 :(得分:3)
试试这个......
工具栏拥有自己的LayoutParams。你不能把它投射到RelativeLayout。
Toolbar.LayoutParams params = (Toolbar.LayoutParams)mToolbar.getLayoutParams();
params.height = 42;
mToolbar.setLayoutParams(params);
如果你想在运行时设置工具栏的高度,只需这样做,
int expected_height = your value;
mToolbar.setMinimumHeight(expected_height );
快乐的编码......
答案 2 :(得分:0)
要避免此错误,您需要使用ViewGroup.LayoutParams
,因为android.support.v7.Toolbar
可以使用它并在mToolbar.getLayoutParams().
上返回