Как установить одинаковый размер столбца программно в Android

У меня есть этот макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Spinner
        android:id="@+id/spinner_strassenfuehrer_fb_screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TableLayout
    android:id="@+id/header_strassenfuehrer_screen_fb"
    android:layout_span="8"
    android:background="#A6A6A6"
    android:stretchColumns="*"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp">
</TableLayout>

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<TableLayout
    android:id="@+id/tablelayout_strassenfuehrer_fb_screen"
    android:layout_span="8"
    android:stretchColumns="*"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
</ScrollView>
</LinearLayout>

И эта часть кода:

 private TableLayout tableLayout;
    private TableLayout tableHeader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fehlerdatenbank_strassenfuehrer_screen);

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);

        //determine height and width
        int width = metrics.widthPixels;

        //read database and put values dynamically into table
        tableLayout = (TableLayout) findViewById(R.id.tablelayout_strassenfuehrer_fb_screen);

        tableHeader = (TableLayout) findViewById(R.id.header_strassenfuehrer_screen_fb);

        //initialize header row and define LayoutParams
        TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f);

        TableRow header_row = new TableRow(this);

        //column 1
        TextView header_tv = new TextView(this);
        header_tv.setLayoutParams(params);
        header_tv.setText("Störcode");
        header_row.addView(header_tv);

        //column 2
        header_tv = new TextView(this);
        header_tv.setLayoutParams(params);
        header_tv.setText("Bezeichnung");
        header_row.addView(header_tv);

        //column 3
        header_tv = new TextView(this);
        header_tv.setLayoutParams(params);
        header_tv.setText("Letztes Auftreten");
        header_row.addView(header_tv);

        //column 4
        header_tv = new TextView(this);
        header_tv.setLayoutParams(params);
        header_tv.setText("Anlagen ID");
        header_row.addView(header_tv);

        //column 5
        header_tv = new TextView(this);
        header_tv.setLayoutParams(params);
        header_tv.setText("Projekt");
        header_row.addView(header_tv);

        //column 6
        header_tv = new TextView(this);
        header_tv.setLayoutParams(params);
        header_tv.setText("Benötigte Ersatzteile");
        header_row.addView(header_tv);

        //column 7
        header_tv = new TextView(this);
        header_tv.setLayoutParams(params);
        header_tv.setText("Benötigtes Werkzeug");
        header_row.addView(header_tv);

        //column 8
        header_tv = new TextView(this);
        header_tv.setLayoutParams(params);
        header_tv.setText("Handlungsleitfaden");
        header_row.addView(header_tv);

        tableHeader.addView(header_row, 0);

        for (int i = 0; i < 100; i++) {

            TableRow row = new TableRow(this);

            //column 1
            TextView tv = new TextView(this);
            tv.setLayoutParams(params);
            tv.setText("TEST");
            row.addView(tv);

            //column 2
            tv = new TextView(this);
            tv.setLayoutParams(params);
            tv.setText("TEST");
            row.addView(tv);

            //column 3
            tv = new TextView(this);
            tv.setLayoutParams(params);
            tv.setText("TEST");
            row.addView(tv);

            //column 4
            tv = new TextView(this);
            tv.setLayoutParams(params);
            tv.setText("TEST");
            row.addView(tv);

            //column 5
            tv = new TextView(this);
            tv.setLayoutParams(params);
            tv.setText("TEST");
            row.addView(tv);

            //column 6
            tv = new TextView(this);
            tv.setLayoutParams(params);
            tv.setText("TEST");
            row.addView(tv);

            //column 7
            tv = new TextView(this);
            tv.setLayoutParams(params);
            tv.setText("TEST");
            row.addView(tv);

            //column 8
            tv = new TextView(this);
            tv.setLayoutParams(params);
            tv.setText("TEST " + i);
            row.addView(tv);

            tableLayout.addView(row, i);
        }
}

Я попытался определить и установить столбцы моих строк равными.

Но то, что я получаю, это:

Кто-нибудь знает, как я могу правильно определить ширину, что header_row и rows под header_row будет в той же строке?

Я новичок в Android, а также прочитал некоторые документы, но пока не смог найти решение.:(

Спасибо!

РЕДАКТИРОВАТЬ: я обновил код, но он все еще выглядит не очень хорошо со строкой заголовка и строк. Мне бы хотелось, чтобы все ценности были между собой. Спасибо!:)

1 ответ

Вам нужно использовать android:stretchColumns="*" в вашем TableLayout объявление, чтобы ваши столбцы имели одинаковую ширину. Поэтому, пожалуйста, измените макет следующим образом.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Spinner
        android:id="@+id/spinner_strassenfuehrer_fb_screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TableLayout
        android:id="@+id/header_strassenfuehrer_screen_fb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_span="8"
        android:background="#A6A6A6"
        android:stretchColumns="*"></TableLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TableLayout
            android:id="@+id/tablelayout_strassenfuehrer_fb_screen"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="8"
            android:stretchColumns="*" />
    </ScrollView>
</LinearLayout>

Надеюсь, это поможет!

Другие вопросы по тегам