将一个微调器添加到GridLayout似乎“打破”了布局。我准备了一个最小的工作示例来说明问题:
我想要一个左边是标签的网格,右边是输入控件。右边的控件应占用剩余空间。这是一个简单的例子:
使用微调器替换其中一个输入控件会导致右列延伸出屏幕边界,从而导致布局难看。
为什么会发生这种情况,我该如何避免呢?
这是第一个例子的代码:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="2" >
<TextView
android:layout_gravity="left"
android:text="TextView" />
<EditText
android:layout_gravity="fill_horizontal"
android:hint="EditText" />
<TextView
android:layout_gravity="left"
android:text="TextView" />
<EditText
android:layout_gravity="fill_horizontal"
android:hint="EditText" />
</GridLayout>
这是第二张图片的代码。唯一的区别是第一个EditText已被Spinner取代:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="2" >
<TextView
android:layout_gravity="left"
android:text="TextView" />
<Spinner
android:id="@+id/spinner1"
android:layout_gravity="fill_horizontal" />
<TextView
android:layout_gravity="left"
android:text="TextView" />
<EditText
android:layout_gravity="fill_horizontal"
android:hint="EditText" />
</GridLayout>
答案 0 :(得分:16)
显然,通过将Spinner的layout_width
设置为零可以避免此问题:
<Spinner
android:id="@+id/Spinner1"
android:layout_gravity="fill_horizontal"
android:layout_width="0dp" />
我会将此标记为已接受的答案,因为它可以轻松解决问题,但如果有人能为此行为提出解释,我会很乐意改变。
答案 1 :(得分:1)
try this code
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="1" />
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:hint="EditText" />
</TableRow>
</TableLayout>