在我的应用中,我使用android.support.v7.widget.Toolbar
。
工具栏的左半部分始终充当后退按钮。
对于不同的活动,右半部分是不同的。有时它只是文字,有时是按钮。因此,我以编程方式向右半部分提供视图。
工具栏
<android.support.v7.widget.Toolbar>
...
... <LinearLayout
android:id="@+id/left_LL"/>
...
<LinearLayout
android:id="@+id/right_LL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:orientation="horizontal" />
</android.support.v7.widget.Toolbar>
我在right_LL中夸大了这个观点:
child_button.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/right_IB"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/save"
android:background="@null"
android:onClick="onRightHeaderButton"
android:scaleType="fitXY" />
我以这样编程方式添加它:
right_LL.addView(inflater.inflate(R.layout.child_button,
null, false));
问题,按钮占据了屏幕的一半。它的原始尺寸为512x512。
我认为也许LayoutParams会以某种方式重置,所以我也尝试了
final float scale = getResources().getDisplayMetrics().density;
int pixels = (int) (30 * scale + 0.5f);
right_IB = (ImageButton) right_LL.findViewById(R.id.right_IB);
right_IB.setLayoutParams(new ViewGroup.LayoutParams(
pixels,pixels));
它给出了这个例外:
Ĵava.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
非常感谢任何帮助。
答案 0 :(得分:2)
当您调用inflater.inflate(R.layout.child_button, null, false)
时,您正在为null
传递父视图 - 这会导致忽略任何layout_
属性(因为这些属性仅由父视图使用) - 有关详细信息,请参阅this Google+ post。
相反,你应该使用
inflater.inflate(R.layout.child_button, right_LL, true));
这会导致您的child_button
布局为其父布局right_LL
正确充气,并自动添加(true
所做的那样)。
答案 1 :(得分:0)
确保导入正确的LayoutParams
。
android.widget.LinearLayout.LayoutParams
的 LinearLayout
或者您LayoutParams
的导入声明可能正在导入ViewGroup.LayoutParams
。
尝试明确使用
LinearLayout.LayoutParams(...):
spinner1.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
答案 2 :(得分:0)
我没有足够的声誉来评论,所以我会写这个作为答案:
您是否看过Layout Infalter的Android文档?尝试将您的LinearLayout添加为充气视图的父/根,看看它是否有效。
另外,检查您的导入。 LogCat抛出一个强制转换异常,所以可能你没有使用android.view.ViewGroup.LayoutParams
。
答案 3 :(得分:0)
我偶然决定用LinearLayout&amp; amp;有效!!! 所以问题就解决了。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/right_IB"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@null"
android:onClick="onRightHeaderButton"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher" />
</LinearLayout>
我不知道为什么,但确实如此。如果有人可以给我正确的解释,那我就会很棒。