17

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

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

它没有给出异常,但它也不起作用,并且工具栏得到它的默认更大高度,而不是我定义的高度。但是当然可以设置参数xml,但是我也需要在java中设置高度。

4

3 回答 3

20

尝试这个 -

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

这对我来说可以。

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

mToolbar.requestLayout();

上面的行将强制您的工具栏重新测量所有内容。您的代码可能无法正常工作,因为您试图在布局膨胀后更改高度。在这种情况下,您需要强制您的视图重新测量所有内容。查看以下方法以获取更多信息 - requestLayout()、invalidate() 和 forceLayout()。在更改 LayoutParams 时,这三种方法很方便,但价格不菲。如果你的 Layout 很重并且里面有很多子视图,调用这些方法中的任何一个都会影响你的应用程序的性能,特别是在低端设备上。因此,请确保您非常小心地使用这些方法。

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

另外,请不要遵循 Silambarasan Poonguti 的回答,因为它有点模棱两可。如果您尝试访问子 LayoutParams,则需要 LayoutParams 强制转换。甚至 View 也有自己的 LayoutParams,您必须将其强制转换为父或根 LayoutParams。如果您的 Toolbar 是 RelativeLayout 的子视图,则将 LayoutParams 转换为 Toolbar.LayoutParams 将使应用程序崩溃,您必须将 LayoutParams 转换为 RelativeLayout.LayoutParams

于 2015-09-15T05:07:43.223 回答
5

尝试这个...

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

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

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

    int expected_height = your value;
    mToolbar.setMinimumHeight(expected_height );
于 2015-09-15T04:49:10.137 回答
0

为了避免您需要使用的错误ViewGroup.LayoutParams,因为android.support.v7.Toolbar使用它并返回它mToolbar.getLayoutParams().

于 2016-05-03T22:53:24.233 回答