我的活动设置如下:
<RelativeLayout>
<Button>
<LinearLayout>
<RelativeLayout>
<LinearLayout> <--- THIS IS WHAT I WANT TO CHANGE
<RelativeLayout>
</LinearLayout>
</RelativeLayout>
我想更改线性布局的高度,所以我尝试使用LayoutParams,它总是在运行时抛出一个错误。我究竟做错了什么?这是我对LayoutParams的尝试:
LinearLayout g1 = (LinearLayout) findViewById(R.id.graph1);
g1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 30));
更新: 这是有问题的XML文件,我感兴趣的是graph1 graph2 graph3和graph4。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#16467A"
android:padding="10dp" >
<Button
android:id="@+id/btn_ok"
android:layout_width="205dp"
android:layout_height="40dp"
android:layout_below="@+id/liniar"
android:layout_marginTop="10dp"
android:background="@drawable/kvadrat"
android:clickable="true"
android:text="ОК"
android:textColor="#FFFFFF"
android:textStyle="bold" />
<LinearLayout
android:id="@+id/liniar"
android:layout_width="205dp"
android:layout_height="190dp"
android:layout_alignLeft="@+id/btn_ok"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="false"
android:background="@drawable/kvadrat"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="204dp"
android:layout_height="140dp"
android:layout_gravity="top"
android:layout_marginTop="10dp" >
<LinearLayout
android:id="@+id/graph1"
android:layout_width="30dp"
android:layout_height="120dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="false"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:background="#00a313"/>
<LinearLayout
android:id="@+id/graph2"
android:layout_width="30dp"
android:layout_height="140dp"
android:layout_alignParentBottom="true"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@+id/graph1"
android:background="#00a313"/>
<LinearLayout
android:id="@+id/graph3"
android:layout_width="30dp"
android:layout_height="80dp"
android:layout_alignParentBottom="true"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@+id/graph2"
android:background="#00a313"/>
<LinearLayout
android:id="@+id/graph4"
android:layout_width="30dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@+id/graph3"
android:background="#00a313"/>
</RelativeLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="29dp"
android:text="A"
android:textColor="#DCA601"
android:textSize="20dp"
android:textStyle="bold"
android:typeface="normal" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="31dp"
android:text="B"
android:textColor="#DCA601"
android:textSize="20dp"
android:textStyle="bold"
android:typeface="normal" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:text="C"
android:textColor="#DCA601"
android:textSize="20dp"
android:textStyle="bold"
android:typeface="normal" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:text="D"
android:textColor="#DCA601"
android:textSize="20dp"
android:textStyle="bold"
android:typeface="normal" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
答案 0 :(得分:0)
使用LogCat检查与错误关联的Java堆栈跟踪。如果您无法解释堆栈跟踪告诉您的内容,请在提问时粘贴堆栈跟踪。
但是,您的问题似乎是您正在尝试将LinearLayout.LayoutParams
用于RelativeLayout
的孩子,所以我的猜测是您获得了ClassCastException
。< / p>
LayoutParams
的特定风格由View
的父决定,而不是View
本身。
顺便说一下,您可以考虑调用getLayoutParams()
,调整现有实例,并通过setLayoutParams()
更新它,而不是创建新实例。特别是精明地使用基类(例如,ViewGroup.LayoutParams
,LinearLayout.LayoutParams
和RelativeLayout.LayoutParams
的基类),您可以更好地将自己与父类的特定类隔离开来。
答案 1 :(得分:0)
您需要使用父级的LayoutParams,因此您需要使用RelativeLayout.LayoutParams,因为线性布局是相对布局。