web-dev-qa-db-ja.com

各列に正確に50%の2列のTableLayout

これは、Androidでの最初のステップから私を困惑させます。 2列のTableLayoutの両方の列をそれぞれ正確に50%にすることはできません。

以下に例を示します。

<ScrollView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent" >

    <TableLayout
        Android:id="@+id/tablelayout"
        Android:layout_height="wrap_content"
        Android:layout_width="fill_parent"
        Android:paddingRight="2dip" >

        <TableRow>
            <TextView
                style="@style/TextViewStandard"
                Android_layout_span="2"
                Android:layout_weight="1" 
                Android:text="Bla" />
        </TableRow>

        <TableRow>
            <TextView
                style="@style/TextViewStandard"
                Android:layout_weight="1"
                Android:text="Name:" />

            <EditText
                style="@style/EditTextStandard"
                Android:id="@+id/et_name"
                Android:layout_weight="1" />
        </TableRow>

        <TableRow>
            <TextView
                style="@style/TextViewStandard"
                Android:layout_weight="1"
                Android:text="URL:" />

            <EditText
                style="@style/EditTextStandard"
                Android:id="@+id/et_url"
                Android:layout_weight="1" />
        </TableRow>

        <TableRow>
            <Button
                style="@style/ButtonStandard"
                Android:layout_column="0"
                Android:layout_marginTop="6dip"
                Android:onClick="onClickOk"
                Android:text="@Android:string/ok" />
        </TableRow>
    </TableLayout>
</ScrollView>

そして、対応するスタイル定義は次のとおりです。

<resources>
    <style name="ButtonStandard" parent="@Android:style/Widget.Button">
        <item name="Android:layout_height">wrap_content</item>
        <item name="Android:layout_width">fill_parent</item>
    </style>

    <style name="EditTextStandard" parent="@Android:style/Widget.EditText">
        <item name="Android:layout_height">wrap_content</item>
        <item name="Android:layout_marginLeft">2dip</item>
        <item name="Android:layout_marginRight">2dip</item>
        <item name="Android:layout_marginTop">2dip</item>
        <item name="Android:layout_width">fill_parent</item>
    </style>

    <style name="TextViewStandard" parent="@Android:style/Widget.TextView">
        <item name="Android:layout_height">wrap_content</item>
        <item name="Android:layout_marginLeft">2dip</item>
        <item name="Android:layout_marginRight">2dip</item>
        <item name="Android:layout_marginTop">2dip</item>
        <item name="Android:layout_width">fill_parent</item>
        <item name="Android:textColor">@Android:color/white</item>
    </style>
</resources>

これは、関連するCheckBoxで本当に台無しになります。

私の定義の何が問題になっていますか?

事前に感謝します。 HJW

33
Harald Wilhelm

子ビューでAndroid:layout_width属性を0dpに設定しようとしました(もちろん、Android:layout_weight1として保持します)。

与えられたスペースを2つの子ビュー間で均等に分配したいと思ったときも同様のシナリオでしたが、「より広いコンテンツ」を持つ子もその親内で兄弟よりも広くなったため、そうしませんでした。これは、幅の広い子ほど初期幅が大きいためです。両方の子が同じ幅(両方のAndroid:layout_width="0dp")から開始することを確認すると、それらの間でスペースが均等に分配されることも保証されます。

67
dbm

これは、テーブルを均等にフォーマットする方法です。あなたの質問の一部ではありませんが、Android:layout_column属性を含まない他のTableRowの子のすべての列Android:layout_span = "2"にまたがります。お役に立てれば。

<TableLayout 
  Android:id="@+id/tableLayout1"
  Android:layout_width="fill_parent"
  Android:layout_height="wrap_content"
  Android:stretchColumns="0,1">

    <TableRow
      Android:id="@+id/tableRow1"
      Android:layout_width="fill_parent"
      Android:layout_height="wrap_content">

        <TextView
          Android:id="@+id/textView1"
          Android:layout_column="0">
        </TextView>

        <TextView
          Android:id="@+id/textView2"
          Android:layout_column="1">
        </TextView>

    </TableRow>

</TableLayout> 
27
outkkast

コントロールを保持するフレームレイアウト内にテーブルレイアウトを作成します。この例では、2列のレイアウトがあり、各列の中央に2つのImageViewを配置します。

    <TableLayout 
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:stretchColumns="1">

        <TableRow>
            <FrameLayout 
                Android:layout_height="wrap_content"
                Android:layout_width="0dp"
                Android:layout_weight="1">

                <ImageView Android:layout_width="wrap_content" 
                    Android:layout_height="wrap_content" 
                    Android:src="@drawable/button_wedding_day_cheat_sheet" 
                    Android:id="@+id/buttonWeddingDayCheatSheet"
                    Android:onClick="onClickWeddingDayCheatSheet"
                    Android:layout_gravity="center_horizontal">
                </ImageView>
            </FrameLayout>

            <FrameLayout 
                Android:layout_height="wrap_content"
                Android:layout_width="0dp"
                Android:layout_weight="1">
                <ImageView Android:layout_width="wrap_content" 
                    Android:layout_height="wrap_content" 
                    Android:src="@drawable/button_share_favorite_recipe" 
                    Android:id="@+id/buttonShareFavoriteRecipe"
                    Android:onClick="onClickShareFavoriteRecipe"
                    Android:layout_gravity="center_horizontal">
                </ImageView>
                </FrameLayout>
            </TableRow>

    </TableLayout>
17
Edmar Miyake

Androidテーブルの列は、どの行でも最も広いビューに常に適合します。列の明示的なコントロールはありません。グリッドビューでは、次のような列サイズをより詳細に制御できます。 columnWidth = "100dp"

テーブルの左と右のビューが同じサイズに設定される場合、中央のテーブルには2つの50%間隔の列があります。

0
Lumis