Программный макет с SetPadding и SetGravity - PullRequest
0 голосов
/ 03 ноября 2011

Я пытаюсь продублировать следующий макет программно;однако setGravity и setPadding, похоже, не дают эффекта:

Я пытаюсь воссоздать текстовые представления внутри TableRows (обратите внимание, что есть отступы, а второе текстовое представление выровнено по правому краю).Кроме того, я пытаюсь воссоздать дополнительные записи, потому что они динамические:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/myinfo_root"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:scrollbars="vertical"
        >
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainTable"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="1">

    <TableRow>
        <TextView
            android:layout_column="1"
            android:text="Text1"
            android:padding="3dip" />

        <TextView
            android:id="@+id/text1"
            android:text="TBD"
            android:gravity="right"
            android:padding="3dip" />
    </TableRow>
    <TableRow>
        <TextView
            android:layout_column="1"
            android:text="Text2"
            android:padding="3dip" />

        <TextView
            android:id="@+id/text2"
            android:text="TBD"
            android:gravity="right"
            android:padding="3dip" />
    </TableRow>
    . . .

Вот фрагмент кода для добавления TextViews.Кажется, это работает, но записи не имеют отступов и не выровнены по правому краю.

    int n = 0;
    TableLayout table = (TableLayout) findViewById(R.id.mainTable);

    for (int j=0; j<2; j++) {
        Log.v(LOG_TAG, "entering for loop");
        n++;

        TableRow tr = new TableRow(getApplicationContext());
        tr.setId(100+n);

        String key = "hello";
        float value = (float) 1.388);
        value = value/3600;

        TextView tvDynamicKey = new TextView(getApplicationContext());                      
        TextView tvDynamicUnit = new TextView(getApplicationContext());

        tvDynamicUnit.setText(Float.toString(value));
        tvDynamicUnit.setGravity(Gravity.RIGHT);
        tvDynamicKey.setText(key + " " + n); 
        tvDynamicKey.setPadding(3, 3, 3, 3);
        tvDynamicUnit.setPadding(3, 3, 3, 3);
        tr.addView(tvDynamicKey);
        tr.addView(tvDynamicUnit);
        table.addView(tr);
    }    
  }

1 Ответ

1 голос
/ 04 ноября 2011

В макете вы всегда указываете column1 для левого элемента (android: layout_column = "1").Но вы не делаете это программно для динамического создания.Вы можете сделать это так.Я проверил это, он работает в моей среде.

 tvDynamicKey.setLayoutParams(new TableRow.LayoutParams(1));
...