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

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

创建 key 的代码:

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

最佳答案

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

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

关于android - 为什么以编程方式为 Android 线性布局列设置权重无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677847/

相关文章:

java - 解析复杂的 JSON 响应

android - 在 LatinIME 中找不到文件 AndroidManifest.xml

java - 如何在 ScrollView 和 LinearLayout 中居中

android - 从url下载图片并在android的LinearLayout背景中设置?

android - Gridview 将项目列为 Listview,我该如何解决?

java - android开发架构(android vs java web app)

android - 屏幕关闭时流式传输音频

android - 混淆 Activity 名称的解决方法

android - 我想在对话框 fragment 中设置最大高度

android - 如何将表格布局垂直分成相等的部分?