2015-04-28 59 views
2

我在尝试将布局参数设置到我的工具栏时出现了奇怪的异常。
无法将LayoutParams设置为工具栏

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实例作为布局参数,可以只工具栏dissappears。 我将不胜感激任何帮助

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

我已经更新了问题 – Bolein95

+0

@ Bolein95更新了我的答案 –

+1

工具栏消失 – Bolein95

0

设置一个特定的高度:

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

或者将项目添加到您的工具栏,所以它不是空的, wrap_content实际上有东西要包装。

+0

设置了您提供的特定高度后,工具栏消失了。我的工具栏里实际上有一个TextView ... – Bolein95

+0

@ Bolein95你的代码意味着你可以自己隐藏它:'getSupportActionBar()。hide();'。 – Simas

+0

抱歉,这是上市不必要的部分。然后我稍后再显示它 – Bolein95