0

我有一个这样的活动:

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

2 回答 2

0

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

但是,您的问题似乎是您正试图将其LinearLayout.LayoutParams用于 a 的孩子RelativeLayout,所以我的猜测是您得到了 a ClassCastException

的具体风味LayoutParams由 的级决定View,而不是其View本身。

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

于 2013-06-18T23:50:34.343 回答
0

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

于 2013-06-18T23:53:38.000 回答