web-dev-qa-db-ja.com

XMLテーブルのレイアウト?等しい幅のボタンで満たされた2つの等幅の行?

以下は、LAND for XML形式の一部です。

<TableLayout
    Android:layout_height="wrap_content"
    Android:layout_width="wrap_content"
    Android:layout_gravity="center"
    Android:stretchColumns="*">
<TableRow>    
    <Button
        Android:id="@+id/countbutton"
        Android:text="@string/plus1"/>      
    <Button
        Android:id="@+id/resetbutton"
        Android:text="@string/reset" 
        />  
</TableRow>
</TableLayout>

そして今私が得ないもの-1行とボタンの幅はボタン内のテキストに依存します。両方のテキストが等しい場合は、次のように言います。TEXT ok-テーブルの半分は画面の中央にあります。ただし、サイズが異なる場合は、「A」と「THIS IS THE LONG BUTTON」と言いましょう。テーブルの中央が画面の中央にないため、ボタンの幅が等しくありません。 ...

36
Oliver Goossens

ボタンが同じサイズの行にボタンを配置するには、実行する必要があります。

    <LinearLayout Android:orientation="horizontal" 
         Android:layout_width="fill_parent"
         Android:layout_height="fill_parent">
         <Button Android:layout_weight="1" 
             Android:layout_height="wrap_content" 
             Android:layout_width="0dip"/>
         <Button Android:layout_weight="1" 
             Android:layout_height="wrap_content" 
             Android:layout_width="0dip"/>
    </LinearLayout>

ボタンのその他のxmlプロパティを入力します。

魔法は、layout_weightプロパティとwidthプロパティにあります。テーブルレイアウトは必要ありません。これらのプロパティは、ビューが親レイアウトで等しいスペースを占める必要があることをレイアウトに伝えます。

91
Robby Pond

承認された回答に加えて:

同様の問題があり、列幅が等しいグリッドに複数の画像が必要なため、テーブルレイアウトを使用しました。これは機能しましたが、画像が非同期で読み込まれるため、すべての列に少なくとも1つの画像が含まれるまで、対応する列が幅全体を占めていました。

Robby Pondのソリューションを使用してこれを解決しましたが、最後の行では機能しませんでした。必ずしも他の行と同じ数の画像を持っているわけではなく、それらの画像を拡大して、上記と同じ列。これに対処するために、その行の残りの空の列を通常のViewオブジェクトで埋めました。

他のすべての画像と同じレイアウトパラメータを使用:

width = 0, weight = 1.そしてそれで解決しました!

4
may5694

良い例(元は http://androidadvice.blogspot.com/2010/10/tablelayout-columns-equal-width.html から)

テスト済み、動作中:

<TableRow>
  <!-- Column 1 -->
  <TextView
     Android:id="@+id/tbl_txt1"
     Android:layout_width="0dip"
     Android:layout_height="wrap_content"
     Android:background="@color/red"
     Android:textColor="@color/white"
     Android:padding="10dip"
     Android:layout_margin="4dip"
     Android:layout_weight="1"
     Android:text="Column 1" />

  <!-- Column 2 -->
  <TextView
     Android:id="@+id/tbl_txt2"
     Android:layout_width="0dip"
     Android:layout_height="wrap_content"
     Android:background="@color/red"
     Android:textColor="@color/white"
     Android:padding="10dip"
     Android:layout_margin="4dip"
     Android:layout_weight="1"
     Android:text="Column 2" />

  <!-- Column 3 -->
  <TextView
     Android:id="@+id/tbl_txt3"
     Android:layout_width="0dip"
     Android:layout_height="wrap_content"
     Android:background="@color/red"
     Android:textColor="@color/white"
     Android:padding="10dip"
     Android:layout_margin="4dip"
     Android:layout_weight="1"
     Android:text="Column 3" />
</TableRow>
4
Uros Majeric

レイアウトスニペット

<TableLayout
    Android:id="@+id/tablelayout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" />

プログラムでテーブルのボタンのレイアウトプロパティを設定するコード:

public void addButtons(View view) {
    TableLayout tableLayout = (TableLayout) findViewById(R.id.tablelayout);
    Context context = getApplicationContext();
    tableLayout.removeAllViews();

    for (int rowIndex = 0; rowIndex < ROWS; rowIndex++) {
        TableRow row = new TableRow(context);
        for (int columnIndex = 0; columnIndex < COLUMNS; columnIndex++) {
            Button btn = new Button(context);
            LayoutParams buttonParams = new LayoutParams(0,
                    LayoutParams.WRAP_CONTENT, 1f);
            btn.setLayoutParams(buttonParams);
            row.addView(btn);
        }
        tableLayout.addView(row);
    }
}
0
npeder

これを試してください:テスト済みで動作しています:

1)For tablelayout set Android:stretchColumns = "1"

2)各アイテム(列)も設定layout_width = "0dip" and layout_weight = "1"

3)tablerowのlayout_widthを設定しないでください

        <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
            xmlns:tools="http://schemas.Android.com/tools" Android:layout_width="match_parent"
            Android:layout_height="match_parent" Android:paddingLeft="@dimen/activity_horizontal_margin"
            Android:paddingRight="@dimen/activity_horizontal_margin"
            Android:paddingTop="@dimen/activity_vertical_margin"
            Android:paddingBottom="@dimen/activity_vertical_margin"
            tools:context="inext.smartshop.CustomerProfile.CustomerProfileView">


        <RelativeLayout
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content">


            <TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:id="@+id/tablelayout"
            Android:stretchColumns="1"
            Android:layout_above="@+id/userProfilebtnsignout"
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentStart="true"
            Android:layout_alignParentRight="true"
            Android:layout_alignParentEnd="true"
            Android:layout_below="@+id/relativeLayout">

            <TableRow

                Android:layout_height="fill_parent"
                Android:padding="5dp"
                Android:id="@+id/detailsTableRow"
                Android:gravity="center_horizontal">

                <TextView

                Android:layout_height="wrap_content"
                Android:textAppearance="?android:attr/textAppearanceSmall"
                Android:text="Full Name :  "
                Android:layout_width="0dip"
                Android:layout_weight="1"
                Android:id="@+id/textView8"
                Android:gravity="right" />

                <TextView
                Android:layout_width="0dip"
                Android:layout_weight="1"
                Android:layout_height="wrap_content"
                Android:textAppearance="?android:attr/textAppearanceSmall"
                Android:text="Ram Chhabra"

                Android:id="@+id/userProfilename"

                Android:gravity="left" />

            </TableRow>

            <TableRow Android:padding="5dp"

                Android:layout_height="wrap_content">

                <TextView
                Android:layout_width="0dip"
                Android:layout_weight="1"
                Android:layout_height="wrap_content"
                Android:textAppearance="?android:attr/textAppearanceSmall"
                Android:text="Email Address :  "

                Android:id="@+id/textView10"
                Android:gravity="right" />

                <TextView
                Android:layout_width="0dip"
                Android:layout_weight="1"
                Android:layout_height="wrap_content"
                Android:textAppearance="?android:attr/textAppearanceSmall"
                Android:text="[email protected]"
                Android:id="@+id/userProfileemail"
                Android:gravity="left"
                 />
            </TableRow>

            <TableRow Android:padding="5dp">

                <TextView
                Android:layout_width="0dip"
                Android:layout_weight="1"
                Android:layout_height="wrap_content"
                Android:textAppearance="?android:attr/textAppearanceSmall"
                Android:text="Contact No 1 :  "
                Android:id="@+id/textView12"

                Android:gravity="right" />

                <TextView
                Android:layout_width="0dip"
                Android:layout_weight="1"
                Android:layout_height="wrap_content"
                Android:textAppearance="?android:attr/textAppearanceSmall"
                Android:text="8130032232"
                Android:id="@+id/userProfilecontactone"
                 />
            </TableRow>



            </TableLayout>

        </RelativeLayout>

        </RelativeLayout>
0
Ram Chhabra