为什么以编程方式为Android线性布局列设置权重无法正常工作?

时间:2016-02-28 02:01:34

标签: android android-linearlayout

我正在尝试在此线性布局中为上面的饼图创建一个键。但是,权重不能正常工作,并且三列被平分。有谁知道这可能导致什么?谢谢!

布局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);
                }

截图: enter image description here

2 个答案:

答案 0 :(得分:1)

设置每行内容的权重,如下所示:   - 对于TextView百分比,将权重设置为3。   - 对于ImageView,将权重设置为8。   - 对于名称Textview,将权重设置为7。

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

答案 1 :(得分:0)

为视图调用设置权重后:

     yourLinearLayout.invalidate()  

尝试一下,看看它是否有效。