如何在两列之间均匀分割TableRow?

kib*_*yte 3 android

我正在动态生成TableRows.对于每个TableRow,在一列中有一个TextView,在另一列中有一个EditText.如何生成行,使TextView占据行的一半而EditText占用另一半?

这就是我目前拥有的:

布局xml文件

<TableLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="*"
        android:id="@+id/formTable" />
Run Code Online (Sandbox Code Playgroud)

Java源文件

private TreeMap<String, EditText> textData;
...
protected void onCreate(Bundle savedInstanceState) {
    ...
    textData = populateMap();
    ...
    TableLayout table = (TableLayout) findViewById(R.id.formTable);
    configureTableLayout(table,textData);
}

private TreeMap<String, EditText> populateMap() {
    TreeMap<String, EditText> map = new TreeMap<String, EditText>();

    Set<String> dataTypeSet = app.getWorkingDataTypeList();
    for (String dataTypeKey : dataTypeSet) {
        EditText edit = new EditText(this);
        edit.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.FILL_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        edit.setText("0");
        edit.setHorizontallyScrolling(true);
        map.put(dataTypeKey, edit);
    }

    return map;
}

private void configureTableLayout (TableLayout table, 
        Map<String, ? extends View> input) {
    for (Map.Entry<String, ? extends View> entry : input.entrySet()) {
        addTableRow(table, entry.getKey(), entry.getValue());
    }
}

private void addTableRow(TableLayout table, String dataTypeKey, View v) {
    TableRow row = new TableRow(this);
    row.setLayoutParams(new TableRow.LayoutParams(
            TableRow.LayoutParams.FILL_PARENT,
            TableRow.LayoutParams.WRAP_CONTENT));

    TextView textCol = new TextView(this); // left column
    textCol.setText(app.getTypeNameForKey(dataTypeKey));
    textCol.setLayoutParams(new TableRow.LayoutParams(
            TableRow.LayoutParams.FILL_PARENT,
            TableRow.LayoutParams.FILL_PARENT));
    textCol.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
    textCol.setHorizontallyScrolling(true);

    // right column
    TableRow.LayoutParams params = new TableRow.LayoutParams(
            TableRow.LayoutParams.FILL_PARENT,
            TableRow.LayoutParams.WRAP_CONTENT);
    params.column = 1;
    v.setLayoutParams(params);

    row.addView(textCol);
    row.addView(v);

    table.addView(row);
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读过这篇文章了,但这并不是我想要的.我平均分割每一行的主要动机是,如果由app.getTypeNameForKey(dataTypeKey)(找到addTableRow())产生的一个字符串过长,则可能导致EditText列变得太小而无法读取.

Joe*_*Joe 13

请注意,TableLayout扩展LinearLayout(也是如此TableRow).这意味着在任何孩子TableLayout,任何孩子在TableRow,可以指定android:layout_weight属性度日Phoenixblade9描述的行为.刚刚成立android:layout_weight="1"的两TextViewEditText,你会得到50%的分裂.


Cod*_*man 6

从我以前的帖子:

我不知道TableLayout是最好的方法,它可能很麻烦,除非你显示大量数据并需要使用它.

我发现确保表单对象按照我想要的方式分布长度的最佳方法之一是使用权重而不是明确声明宽度.

请尝试以下方法:

<LinearLayout ... android:orientation="horizontal" ... 
android:layout_width="match_parent" android:layout_height="wrap_content"
<TextView ... android:layout_width="0dp" ... android:layout_weight="50" />
<TextView ... android:layout_width="0dp" ... android:layout_weight="50" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

确保将布局宽度声明为0,这将使布局填充到权重.

这应该在屏幕上创建两个彼此相邻的TextView,两者都填满了屏幕的50%.你可以玩不同的百分比.您还可以使用LinearLayout作为占位符,其权重为您要保留的%.

确保您的"权重"加起来为100,以确保视图看起来完全符合您的要求.

如果您愿意,可以将这些LinearLayouts放在TableLayout中:)

希望这可以帮助.