更新 - 2015年9月28日:
通过将GridLayout
替换为使用TableLayout
s TableRow
s的layout_weight=1
s水平兄弟姐妹,layout_weight=1
和ScrollView
,我已达到理想的外观任何最垂直对齐的兄弟单元格。
我正在构建一个由许多不等行和列的嵌套网格组成的UI。网格内的最低级别视图必须填充屏幕的其余部分。除了GridLayout
和帧之外,视图都是动态膨胀的。
我正在使用match_parent
来设置LinearLayout
的宽度和高度。子视图(实际进入网格单元格内的视图)也以相同的方式配置。每个单元格都包含一个垂直GridLayout
,第一个视图是通道的标题栏,第二个视图是另一个ScrollView
。
由于某些原因,当我的网格变得足够大以至于因为项目数量而离开屏幕时,我注意到附近的其他视图无法填满屏幕。
INCORRECT(一旦视图移到屏幕外,使ScrollView
生效,右紫色方块与父级不匹配)
我猜测它与LinearLayout
开始后失去确定身高的能力的观点有关。
更好的展示方式是将此布局XML放入Android Studio并删除ID为 REMOVE_ME_NEXUS_S 的LinearLayout
。
然后使用像Nexus S这样的小屏幕预览设备再次将其添加回去。当您移除minHeight
时,右侧视图会填满屏幕,但当您将其放回时,它只会与{{1}一样大。 }。
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fillViewport="true">
<FrameLayout
android:id="@+id/board_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@android:color/holo_green_dark"
tools:context=".BoardActivity">
<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_margin"
android:background="@android:color/holo_orange_light"
>
<FrameLayout
android:id="@+id/lane_title_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/lane_tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/lane_title_text_size"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_title_margin"
android:textColor="@color/lane_title_text_color"
tools:text="@string/dt_lane_title"/>
</FrameLayout>
<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_margin"
android:background="@android:color/holo_orange_light"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/lane_title_text_size"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_title_margin"
android:textColor="@color/lane_title_text_color"
tools:text="@string/dt_lane_title"/>
</FrameLayout>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="@dimen/lane_minHeight"
android:background="@android:color/holo_purple"
>
</GridLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/REMOVE_ME_NEXUS_S"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_margin"
android:background="@android:color/holo_orange_light"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/lane_title_text_size"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_title_margin"
android:textColor="@color/lane_title_text_color"
tools:text="@string/dt_lane_title"/>
</FrameLayout>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="@dimen/lane_minHeight"
android:background="@android:color/holo_purple"
>
</GridLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_margin"
android:background="@android:color/holo_orange_light"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/lane_title_text_size"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_title_margin"
android:textColor="@color/lane_title_text_color"
tools:text="@string/dt_lane_title"/>
</FrameLayout>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="@dimen/lane_minHeight"
android:background="@android:color/holo_purple"
>
</GridLayout>
</LinearLayout>
</GridLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_margin"
android:background="@android:color/holo_orange_light"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/lane_title_text_size"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/lane_title_margin"
android:textColor="@color/lane_title_text_color"
tools:text="@string/dt_lane_title"/>
</FrameLayout>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="@dimen/lane_minHeight"
android:background="@android:color/holo_purple"
>
</GridLayout>
</LinearLayout>
</GridLayout>
</FrameLayout>
</ScrollView>
我注意到,如果我将layout_rowWeight
设置为右侧LinearLayout
,它将填充父级,但它实际上并不是在我的设备上,只是在工作室预览窗口中