it-swarm.com.de

2-spaltiges TableLayout mit 50% exakt für jede Spalte

Dieses hier verwirrt mich seit meinen ersten Schritten mit Android. Ich kann nicht beide Spalten in einem zweispaltigen TableLayout auf jeweils 50% genau einstellen.

Hier ist ein Beispiel:

<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>

Und hier ist die entsprechende Stildefinition:

<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>

Das wird wirklich durcheinander mit einer CheckBox.

Was ist falsch an meiner Definition?

Vielen Dank im Voraus . HJW

33
Harald Wilhelm

Haben Sie versucht, das Android:layout_width-Attribut in den untergeordneten Ansichten auf 0dp zu setzen (und natürlich den Android:layout_weight als 1 beibehalten)?

Ich befand mich in ähnlichen Szenarien, in denen ich den gegebenen Raum auch gleichmäßig auf zwei untergeordnete Ansichten verteilen wollte, dies jedoch nicht tat, da das Kind mit "weiterem Inhalt" auch innerhalb seines übergeordneten Elements breiter wurde als sein Bruder. Dies lag an der Tatsache, dass das breitere Kind eine größere anfängliche Breite hatte. Wenn Sie sicherstellen, dass beide Kinder von derselben Breite ausgehen (Android:layout_width="0dp" auf beiden), wird auch garantiert, dass der Abstand gleichmäßig zwischen ihnen verteilt wird.

66
dbm

So formatiere ich meine Tabellen gleichmäßig. Nicht Teil Ihrer Frage, sondern umfasst alle Spalten Android: layout_span = "2" für andere TableRow-Kinder, die nicht das Attribut Android: layout_column enthalten. Hoffe das hilft.

<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> 
26
outkkast

Ich würde ein Tabellenlayout erstellen Innerhalb eines Rahmenlayouts, das Ihre Kontrolle hält. In diesem Beispiel habe ich das Layout mit zwei Spalten und in jeder Spalte zwei ImageView-Elemente.

    <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

Die Spalten in der Android-Tabelle passen sich immer an die breiteste Ansicht in jeder Zeile an. Hier gibt es keine expliziten Steuerelemente der Spalten. Die Rasteransicht bietet mehr Kontrolle über die Spaltengröße wie: Android: columnWidth = "100dp"

Wenn die linke und rechte Ansicht in der Tabelle auf die gleiche Größe eingestellt wäre, könnte eine zentrierte Tabelle zwei Spalten mit 50% Abstand haben. 

0
Lumis