为什么Android线性布局列的编程设置权重不能正常工作?

为什么Android线性布局列的编程设置权重不能正常工作?,android,android-linearlayout,Android,Android Linearlayout,我试图在这个线性布局中为上面的饼图创建一个键。但是,权重无法正常工作,三列被平均分割。有人知道这可能是什么原因吗?谢谢 布局XML: <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tableLayout1" android:orientation="vertical"

我试图在这个线性布局中为上面的饼图创建一个键。但是,权重无法正常工作,三列被平均分割。有人知道这可能是什么原因吗?谢谢

布局XML:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tableLayout1"
        android:orientation="vertical"
        android:layout_centerHorizontal="true">
        <TableRow android:gravity="center"
            android:id="@+id/tableRow"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:weightSum="4">
            <ImageButton
                android:layout_width="0dp"
                android:layout_height="100dp"
                android:id="@+id/aiButton"
                android:layout_gravity="center_horizontal"
                android:src="@drawable/barchartwhite"
                android:background="#CCAF00"
                android:layout_weight="1"
                android:scaleType="fitCenter"
                />
            <TextView
                android:layout_width="0dp"
                android:layout_height="100dp"
                android:text="TP Activity"
                android:id="@+id/textView2"
                android:layout_gravity="center|center_vertical"
                android:textSize="40sp"
                android:background="#CCAF00"
                android:layout_weight="3"
                android:layout_alignParentTop="true"
                android:textColor="#FFFFFF"
                android:layout_centerHorizontal="true"
                android:gravity="center_vertical" />
        </TableRow>
        <TableRow android:gravity="center"
            android:id="@+id/tableRowSub"
            android:layout_height="wrap_content"
            android:layout_width="match_parent">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Percentage of Activity per TP"
                android:id="@+id/textViewSub"
                android:layout_gravity="center"
                android:textSize="16sp"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp" />
        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="5dip">

            <com.shannonsystemsllc.ediconnect.PieChartView
                xmlns:chart="http://schemas.android.com/apk/res-auto"
                android:id="@+id/piechart"
                android:paddingRight="12dp"
                android:paddingLeft="12dp"
                android:layout_width="300sp"
                android:layout_height="300dp"/>
        </TableRow>

    </LinearLayout>

创建密钥的代码:

for (int i = 0; i < customers.size(); i++) {
                int c[] = {Color.parseColor("#FF4B66"),Color.parseColor("#00A9AC"),Color.parseColor("#70A200"),Color.parseColor("#FAB448"),Color.parseColor("#BFBFBF"),Color.GREEN,custColor,Color.CYAN,Color.BLUE};


                    TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT);
                    TableLayout.LayoutParams tl = new TableLayout.LayoutParams();

                    final float scale = getActivity().getResources().getDisplayMetrics().density;
                    int pixels = (int) (30 * scale + 0.5f); //set pixels to dp
                    TableRow row = new TableRow(activity);
                    row.setWeightSum(9);
                    //first row
                    tl.weight = 1;
                    lp.weight = 6;
                    lp.height = pixels;
                    row.setLayoutParams(lp);
                    TextView tv1a = new TextView(getActivity());
                    tv1a.setTextSize(22);
                    tv1a.setText(customers.get(i));
                    tv1a.setLayoutParams(lp);
                    tv1a.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);

                    TextView tv1b = new TextView(getActivity());
                    tv1b.setTextSize(24);
                    Float perFloat = ((float)pieChartValues[i]/dataTotal*100);
                    remainderTotal = remainderTotal - perFloat.intValue();
                    String percentage;
                    if (perFloat.intValue() == 0)
                    {
                        percentage = ("1%");
                    }
                    else
                    {
                        percentage = (perFloat.intValue() + "%");
                    }

                    lp.weight = 2;
                    tv1b.setText(percentage);
                    tv1b.setLayoutParams(lp);
                    tv1b.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);

                    lp.weight = 1;
                    ImageView tv1c = new ImageView(getActivity());
                    tv1c.setLayoutParams(lp);
                    tv1c.setBackgroundColor(c[i]);

                    row.setWeightSum(3);
                    row.addView(tv1b);
                    row.addView(tv1c);
                    row.addView(tv1a);
                    row.setId(i);
                    ll.addView(row);
                }
for(int i=0;i
截图:

为视图调用设置权重后:

     yourLinearLayout.invalidate()  

试试看是否有效。

按如下方式设置每行内容的权重: -对于百分比文本视图,将权重设置为3。 -对于ImageView,将权重设置为8。 -对于名称Textview,将权重设置为7


这将导致整行看起来稍微偏离中心。确保所有三个视图都设置为与父视图宽度匹配。

您希望如何分割它们?基本上,我正在尝试将它们设置为6/9、2/9和1/9,彩色列是最小的。谢谢,我无意中设置了两次weightSum,并修复了这一问题,但这也有助于设置适合列的比率。即使是我也忽略了这一点,很乐意提供帮助。