gridlayout:在图像视图中居中图像

gridlayout: centering image in imageview

我希望图像适合网格布局的图像视图。当我不给 imageview 一个来源时,布局是正确的。但是当我把源放在那里时,imageview 的宽度和高度是错误的。有人可以帮我解决问题吗?我这是来玩的

没有 src 的正确布局

XML 没有 src

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.ktappworks.test.MainActivity">

    <GridLayout
        android:id="@+id/ph0"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:layout_marginTop="0dp"
        android:clipChildren="false"
        android:columnCount="5"
        android:rowCount="2"
        android:src="@mipmap/ic_launcher"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent">

        <ImageView
            android:id="@+id/ph00"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

        <ImageView
            android:id="@+id/ph01"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

        <ImageView
            android:id="@+id/ph02"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

        <ImageView
            android:id="@+id/ph03"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

        <ImageView
            android:id="@+id/ph04"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

        <ImageView
            android:id="@+id/ph05"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

        <ImageView
            android:id="@+id/ph06"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

        <ImageView
            android:id="@+id/ph07"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

        <ImageView
            android:id="@+id/ph08"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

        <ImageView
            android:id="@+id/ph09"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
             />

    </GridLayout>

</android.support.constraint.ConstraintLayout>

src 布局不正确

XML 与 src

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.ktappworks.test.MainActivity">

    <GridLayout
        android:id="@+id/ph0"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:layout_marginTop="0dp"
        android:clipChildren="false"
        android:columnCount="5"
        android:rowCount="2"
        android:src="@mipmap/ic_launcher"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent">

        <ImageView
            android:id="@+id/ph00"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

        <ImageView
            android:id="@+id/ph01"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

        <ImageView
            android:id="@+id/ph02"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

        <ImageView
            android:id="@+id/ph03"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

        <ImageView
            android:id="@+id/ph04"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

        <ImageView
            android:id="@+id/ph05"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

        <ImageView
            android:id="@+id/ph06"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

        <ImageView
            android:id="@+id/ph07"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

        <ImageView
            android:id="@+id/ph08"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

        <ImageView
            android:id="@+id/ph09"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_rowWeight="1"
            android:scaleType="fitXY"
            android:src="@drawable/owl" />

    </GridLayout>

</android.support.constraint.ConstraintLayout>

Owl 图片

您需要将每个 ImageView 的宽度和高度定义为 0dp 以使 column/row 权重生效。我认为默认值是wrap_content。您可能还想将 scaleType 更改为 fitXY 以外的内容,因为 fitXY 会使图像失真。

在某些 API 级别使用权重时,我还 运行 遇到了 GridLayout 的本机实现的问题。 (我最近回答了这样一个问题,如果我能找到它,我会 post 在这里引用它。)你可能想考虑使用 GridLayout 的支持库版本,因为它似乎有一个权重的工作实施。将以下内容添加到此版本 GridLayout 的 gradle 文件中:

    compile 'com.android.support:gridlayout-v7:26.1.0'

下面是进行这些更改后的屏幕截图: