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

Vek*_*eka 13 android android-layout android-xml android-viewgroup android-toolbar

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

toolbar.setLayoutParams(new Toolbar.LayoutParams(LayoutParams.MATCH_PARENT, 42));
toolbar.setMinimumHeight(42);
Run Code Online (Sandbox Code Playgroud)

但是这个日志会导致致命的异常 - > 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);
Run Code Online (Sandbox Code Playgroud)

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

所以请帮我解决问题.

Var*_*oid 16

试试这个 -

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mToolbar.getLayoutParams();
layoutParams.height = 42;
mToolbar.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)

这对我来说可以.

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

mToolbar.requestLayout();
Run Code Online (Sandbox Code Playgroud)

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

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

另外请不要按照Silambarasan Poonguti的回答,因为它有点含糊不清.如果您尝试访问子LayoutParams,则需要进行LayoutParams转换.即使View有自己的LayoutParams,你必须将它转换为父或根LayoutParams.如果您的工具栏是RelativeLayout的子视图,那么将LayoutParams转换为Toolbar.LayoutParams会使应用程序崩溃,您必须将LayoutParams强制转换为RelativeLayout.LayoutParams


Sil*_*uti 5

尝试这个...

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

    Toolbar.LayoutParams params = (Toolbar.LayoutParams)mToolbar.getLayoutParams();
    params.height = 42;
    mToolbar.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)

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

    int expected_height = your value;
    mToolbar.setMinimumHeight(expected_height );
Run Code Online (Sandbox Code Playgroud)

快乐编码...