无法将LayoutParams设置为工具栏

时间:2015-04-28 18:01:40

标签: android android-appcompat

我在尝试将布局参数设置到工具栏时遇到了奇怪的异常。

 java.lang.ClassCastException: android.support.v7.widget.Toolbar$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams

我想在工具栏的右侧放置一个内部视图,但由于xml layout_gravity属性不正常(请参阅question),我试图以编程方式执行此操作。
我的代码如下所示:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setLayoutParams(new Toolbar.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.WRAP_CONTENT,
        Gravity.CENTER | Gravity.RIGHT));
setSupportActionBar(toolbar);

如果我将LinearLayout.LayoutParams的实例设置为布局参数,则工具栏会消失。 我将不胜感激任何帮助

2 个答案:

答案 0 :(得分:1)

抛出异常是因为您尝试将LayoutParams强制转换为不继承的类,因此会抛出类强制转换异常。要解决这个问题,请使用LinearLayout.LayoutParams而不是

 new LinearLayout.LayoutParams(
    ViewGroup.LayoutParams.MATCH_PARENT,
    ViewGroup.LayoutParams.WRAP_CONTENT,
    Gravity.CENTER | Gravity.RIGHT));

// Toolbar height is 56dp as per material design guidelines

new LinearLayout.LayoutParams(
    ViewGroup.LayoutParams.MATCH_PARENT,
    56,
    Gravity.CENTER | Gravity.RIGHT));

答案 1 :(得分:0)

设置特定高度:

new LinearLayout.LayoutParams(
    ViewGroup.LayoutParams.MATCH_PARENT,
    80,
    Gravity.CENTER | Gravity.RIGHT);

或者向工具栏中添加项目,因此它不为空,wrap_content实际上有一些内容可以包装。