我正在尝试在我的Android应用程序中构建一个动态表。我想要一个 70% 宽的列和一个 30% 宽的列。
如果我使用 android:layout_weight 的布局 xml 进行操作,我没有任何问题:
<TableLayout
android:id="@+id/TableLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="*"
android:background="#ffffff" >
<TableRow
android:id="@+id/TableRow4"
style="@style/RigaTabella"
android:background="#d2ef7b" >
<TextView
android:id="@+id/TitoloSpesaTabella"
style="@style/Titolo"
android:layout_width="0px"
android:layout_weight="0.7"
android:background="#cdcdcd"
android:text="@string/spesa" />
<TextView
android:id="@+id/TitoloCostoTabella"
style="@style/Titolo"
android:layout_width="0px"
android:layout_weight="0.3"
android:background="#ababab"
android:text="@string/costo" />
</TableRow>
</TableLayout>
这就是我得到的:https://i.stack.imgur.com/FLD91.jpg
(我用这个灰色背景来展示两个文本视图的真实维度)
但是,如果我尝试使用此代码:
TableLayout TableLayout = (TableLayout) findViewById(R.id.TableLayout);
for (int i = 0; i < 10; i++) {
TableRow Row = (TableRow) getLayoutInflater().inflate(R.layout.table_row_style, null);
if (i % 2 == 0)
Row.setBackgroundColor(Color.parseColor("#ffffff"));
else
Row.setBackgroundColor(Color.parseColor("#f1f1f1"));
TextView tv = (TextView) getLayoutInflater().inflate(R.layout.testo_sx_style, null);
tv.setText("Test Test");
TextView tv2 = (TextView) getLayoutInflater().inflate(R.layout.testo_dx_style, null);
tv2.setText("$ 1000");
Row.addView(tv);
Row.addView(tv2);
TableLayout.addView(Row);
}
testo_sx_style.xml在哪里:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:gravity="left"
android:textSize="13sp"
android:textColor="#161616"
android:typeface="monospace"
android:background="#cdcdcd"
/>
testo_dx_style.xml在哪里:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:gravity="left"
android:textSize="13sp"
android:textColor="#161616"
android:typeface="monospace"
android:background="#ababab"
/>
我得到这个:https://i.stack.imgur.com/MIvwH.png
我真的不知道这是怎么回事。例如,我还尝试将layout_width设置为100px testo_sx_style.xml,但它不会改变任何东西。似乎某些属性不适用于我的代码。
有人知道错误是什么吗?提前谢谢。
祝你有美好的一天:)
附言对不起我的英语
解决了!只需以下代码行:
tv.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 0.7f));
有了这个,我可以将宽度设置为 0px,将高度设置为 WRAP_CONTENT,将权重设置为 0.7。
它:)效果很好
附言我在这里找到了解决方案:以编程方式设置 TextView
您可以使用布局的权重参数尝试这样的事情:
TableRow tr1 = new TableRow(this);
tabInfo = new TableLayout(this);
tabInfo.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 4.0f));
tr1.addView(tabInfo);