如何将网格布局中的图像按钮居中 - Android Studio

How to center image buttons inside of a Grid Layout - Android Studio

我已经查看了各种解决方案,包括重力,但没有找到我遇到的问题的答案,即网格布局内的图像按钮没有跨越屏幕的宽度 - 看起来就像下面这张图。它们更向左聚集。我希望屏幕上的间距均匀。感谢您的帮助。

这是 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/activity_admin_control"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.myname.myproject.AdminControl">

    <Button
        android:text="Switch to User"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"

        android:layout_centerHorizontal="true"
        android:layout_gravity="center"
        android:id="@+id/userSwitch" />

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/userSwitch"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:rowCount="2"
        android:columnCount="3"
        android:alignmentMode="alignMargins">

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:layout_row="0"
            android:layout_column="0"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton5"
            android:layout_row="0"
            android:layout_column="1"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton6"
            android:layout_row="0"
            android:layout_column="2"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton7"
            android:layout_row="1"
            android:layout_column="0"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton8"
            android:layout_row="1"
            android:layout_column="1"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton9"
            android:layout_row="1"
            android:layout_column="2"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

    </GridLayout>


</RelativeLayout>

试试这个,

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/activity_admin_control"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/userSwitch"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center"
            android:text="Switch to User" />

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_above="@+id/userSwitch"
            android:layout_centerHorizontal="true">

            <GridLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"

                android:layout_centerHorizontal="true"
                android:alignmentMode="alignMargins"
                android:columnCount="3"
                android:rowCount="2">

                <ImageButton

                    android:layout_width="118dp"
                    android:layout_height="118dp"
                    android:layout_column="0"
                    android:layout_row="0"
                    android:scaleType="fitCenter"
                    app:srcCompat="@drawable/common_google_signin_btn_icon_dark" />

                <ImageButton

                    android:id="@+id/imageButton5"
                    android:layout_width="118dp"
                    android:layout_height="118dp"
                    android:layout_column="1"
                    android:layout_row="0"
                    android:scaleType="fitCenter"
                    app:srcCompat="@drawable/common_google_signin_btn_icon_dark" />

                <ImageButton

                    android:id="@+id/imageButton6"
                    android:layout_width="118dp"
                    android:layout_height="118dp"
                    android:layout_column="2"
                    android:layout_row="0"
                    android:scaleType="fitCenter"
                    app:srcCompat="@drawable/common_google_signin_btn_icon_dark" />

                <ImageButton

                    android:id="@+id/imageButton7"
                    android:layout_width="118dp"
                    android:layout_height="118dp"
                    android:layout_column="0"
                    android:layout_row="1"
                    android:scaleType="fitCenter"
                    app:srcCompat="@drawable/common_google_signin_btn_icon_dark" />

                <ImageButton

                    android:id="@+id/imageButton8"
                    android:layout_width="118dp"
                    android:layout_height="118dp"
                    android:layout_column="1"
                    android:layout_row="1"
                    android:scaleType="fitCenter"
                    app:srcCompat="@drawable/common_google_signin_btn_icon_dark" />

                <ImageButton

                    android:id="@+id/imageButton9"
                    android:layout_width="118dp"
                    android:layout_height="118dp"
                    android:layout_column="2"
                    android:layout_row="1"
                    android:scaleType="fitCenter"
                    app:srcCompat="@drawable/common_google_signin_btn_icon_dark" />

            </GridLayout>
        </RelativeLayout>

        </RelativeLayout>

不要自己定义 width。让GridLayout来完成这个任务。将所有 widthheight 设置为 0dp,将所有 weights 设置为 1

这可能对你有用。我没有检查它,但它应该可以工作。

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/userSwitch"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:rowCount="2"
    android:columnCount="3"
    android:alignmentMode="alignMargins">

    <ImageButton

        app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
        android:layout_row="0"
        android:layout_column="0"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:scaleType="fitCenter"/>

    <ImageButton

        app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
        android:id="@+id/imageButton5"
        android:layout_row="0"
        android:layout_column="1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:scaleType="fitCenter"/>

    <ImageButton

        app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
        android:id="@+id/imageButton6"
        android:layout_row="0"
        android:layout_column="2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:scaleType="fitCenter"/>

    <ImageButton

        app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
        android:id="@+id/imageButton7"
        android:layout_row="1"
        android:layout_column="0"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:scaleType="fitCenter"/>

    <ImageButton

        app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
        android:id="@+id/imageButton8"
        android:layout_row="1"
        android:layout_column="1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:scaleType="fitCenter"/>

    <ImageButton

        app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
        android:id="@+id/imageButton9"
        android:layout_row="1"
        android:layout_column="2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:scaleType="fitCenter"/>

</GridLayout>

我发现无法使用 .xml 将 GridView 水平居中 所以我不得不以编程方式进行......这个答案对我帮助很大: link

你可以试试这个宽度和高度是硬编码的你需要修复行或列或者你可以使用边距。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/activity_admin_control"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.myname.myproject.AdminControl">

    <Button
        android:text="Switch to User"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"

        android:layout_centerHorizontal="true"
        android:layout_gravity="center"
        android:id="@+id/userSwitch" />

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/userSwitch"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginLeft="@dimen/activity_vertical_margin"
        android:layout_marginRight="@dimen/activity_vertical_margin"
        android:rowCount="2"
        android:columnCount="3"
        android:alignmentMode="alignMargins">

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:layout_row="0"
            android:layout_column="0"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton5"
            android:layout_row="0"
            android:layout_column="1"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton6"
            android:layout_row="0"
            android:layout_column="2"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton7"
            android:layout_row="1"
            android:layout_column="0"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton8"
            android:layout_row="1"
            android:layout_column="1"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

        <ImageButton

            app:srcCompat="@drawable/common_google_signin_btn_icon_dark"
            android:id="@+id/imageButton9"
            android:layout_row="1"
            android:layout_column="2"
            android:layout_width="118dp"
            android:layout_height="118dp"
            android:scaleType="fitCenter"/>

    </GridLayout>


</RelativeLayout>