当视图大于视口时,为什么match_parent不起作用?

时间:2015-09-26 22:56:30

标签: android android-layout android-scrollview android-gridlayout

更新 - 2015年9月28日: 通过将GridLayout替换为使用TableLayout s TableRow s的layout_weight=1 s水平兄弟姐妹,layout_weight=1ScrollView,我已达到理想的外观任何最垂直对齐的兄弟单元格。

我正在构建一个由许多不等行和列的嵌套网格组成的UI。网格内的最低级别视图必须填充屏幕的其余部分。除了GridLayout和帧之外,视图都是动态膨胀的。

我正在使用match_parent来设置LinearLayout的宽度和高度。子视图(实际进入网格单元格内的视图)也以相同的方式配置。每个单元格都包含一个垂直GridLayout,第一个视图是通道的标题栏,第二个视图是另一个ScrollView

由于某些原因,当我的网格变得足够大以至于因为项目数量而离开屏幕时,我注意到附近的其他视图无法填满屏幕。

正确示例(注意右紫色方形填充空间) correct

INCORRECT(一旦视图移到屏幕外,使ScrollView生效,右紫色方块与父级不匹配) enter image description here

我猜测它与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,它将填充父级,但它实际上并不是在我的设备上,只是在工作室预览窗口中

0 个答案:

没有答案