Spinner在GridLayout中

添加一个微调到一个GridLayout似乎“打破”的布局。 我已经准备了一个最小的工作例子来说明这个问题:

我想要一个左边有标签的网格,右边是input控件。 右侧的控件应占用剩余的空间。 这是一个简单的例子:

与EditTexts网格

使用微调代替其中一个input控件会导致右列伸出屏幕边界 ,导致难看的布局。

网格与微调

为什么会发生这种情况,我该如何避免呢?


以下是第一个例子的代码:

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

Solutions Collecting From Web of "Spinner在GridLayout中"

显然,通过将微调器的layout_width设置为零可以避免这个问题:

 <Spinner android:id="@+id/Spinner1" android:layout_gravity="fill_horizontal" android:layout_width="0dp" /> 

我将这个标记为公认的答案,因为它很容易解决这个问题,但是如果有人能够解释这个行为,我会很乐意改变这个。

 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>