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