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

时间:2015-09-14 20:25:57

标签: android android-layout android-xml android-toolbar android-viewgroup

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

${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中设置高度。

所以请帮我解决问题。

3 个答案:

答案 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().上返回