当给出fill_parent高度时,GridLayout会压低它的子节点并溢出

cha*_*och 5 android view grid-layout

看起来GridLayout似乎总是将其子节点推送到符合其需求的布局.例如以下声明:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnCount="3"
    android:orientation="vertical"
    android:rowCount="4"
    android:useDefaultMargins="true" >
...
    <ImageView
        android:id="@+id/main_image"
        android:layout_column="1"
        android:layout_columnSpan="2"
        android:layout_row="3"
        android:scaleType="fitStart" />
</GridLayout>
Run Code Online (Sandbox Code Playgroud)

GridLayout声明fill_parent,因此我希望它不会溢出.GridLayout应该采用父级的大小,在这种情况下是窗口(全高).但是在层次结构查看器中,GridLayout被设置为垂直和水平的Wrap_content.

因此,ImageView(这是一个大图像)或任何文本视图将被推动以适应自己,因此溢出容器.

这可以在容器网格视图适合父级的层次结构查看器中看到:

容器网格视图

而图像视图溢出

图像视图

阅读文档,我知道有必要设置引力.据我所知,我使用了各种重力选项和图像缩放选项,没有太大影响.删除边距useDefaultMargins="false"确实会改变布局溢出,从而导致问题朝向gridlayout.

我的问题如下:

  • 这是一个错误还是我错误地使用GridLayout
  • 如何强制GridLayout的子项适合其容器并填充剩余空间

Bil*_*ote 0

其他布局中的技巧是为第一个元素指定 android:layout_weight="1.0",而对其他元素不指定任何内容。我不知道为什么它有效,但它确实有效。下面是一个简单的 XML,显示了一个 ImageView、一个 TextView 和一个 Button。如果没有分配给 ImageView 的layout_weight 参数,文本和按钮会向下移动。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white"
    android:orientation="vertical"
    android:keepScreenOn = "true" >

    <ImageView
        android:id="@+id/imageView_surprise"
        android:layout_width="wrap_content"
        android:layout_height="0dip"
        android:scaleType="centerInside"
        android:contentDescription="@string/accessibility_imageView_surprise"
        android:layout_weight="1.0" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="bottom" >

        <TextView
            android:id="@+id/textView_message"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/black"
            android:textSize="24sp"
            android:gravity="center_horizontal" />

        <Button
            android:id="@+id/button_share"
            style="@style/button_text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)