2-столбце TableLayout с 50% точно для каждого столбца
Это меня озадачивает меня с первых шагов с 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
Ответы
Ответ 1
Вы пытались установить атрибут android:layout_width
на 0dp
(и, конечно, сохраните android:layout_weight
как 1
) в дочерних представлениях?
Я был в похожих сценариях, когда я также хотел распределить заданное пространство поровну между двумя дочерними представлениями, но не смог этого сделать, так как ребенок с "более широким контентом" также стал более широким, в пределах своего родителя, чем его родной брат. Это было связано с тем, что более широкий ребенок имел большую начальную ширину. Удостоверившись, что оба ребенка начали с одинаковой ширины (android:layout_width="0dp"
на обоих из них), также гарантировано равномерно распределить пространство между ними.
Ответ 2
Так я равномерно отформатирую таблицы. Не часть вашего вопроса, но для охвата всех столбцов android: layout_span = "2" для других детей TableRow, которые не содержат атрибут android: layout_column. Надеюсь, это поможет.
<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>
Ответ 3
Я бы создал таблицу
Внутри рамки, держащей ваш контроль. В этом примере у меня есть макет двух столбцов, и я поставил два 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>
Ответ 4
Столбцы в таблице Android всегда настраиваются на самый широкий вид, который в любой строке. Здесь нет явных элементов управления столбцами. Вид сетки имеет больший контроль над размером столбца, например: android: columnWidth = "100dp"
Если вид слева и righ в таблице будет иметь тот же размер, то центрированная таблица может иметь два столбца с 50% интервалами.