尝试使用LayoutParams更改视图的尺寸时,我一直收到错误

时间:2013-06-18 23:45:21

标签: java android

我的活动设置如下:

<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>

2 个答案:

答案 0 :(得分:0)

使用LogCat检查与错误关联的Java堆栈跟踪。如果您无法解释堆栈跟踪告诉您的内容,请在提问时粘贴堆栈跟踪。

但是,您的问题似乎是您正在尝试将LinearLayout.LayoutParams用于RelativeLayout的孩子,所以我的猜测是您获得了ClassCastException。< / p>

LayoutParams的特定风格由View决定,而不是View本身。

顺便说一下,您可以考虑调用getLayoutParams(),调整现有实例,并通过setLayoutParams()更新它,而不是创建新实例。特别是精明地使用基类(例如,ViewGroup.LayoutParamsLinearLayout.LayoutParamsRelativeLayout.LayoutParams的基类),您可以更好地将自己与父类的特定类隔离开来。

答案 1 :(得分:0)

您需要使用父级的LayoutParams,因此您需要使用RelativeLayout.LayoutParams,因为线性布局是相对布局。