如何在 LinearLayout 中将 CardView 居中?

How to center CardView inside LinearLayout?

我有纵向显示,我想将其转换为横向模式。

在横向模式下,包含 LinearLayout 的第一个子项(也是一个 LinearLayout)应该包含 CardView 和 ImageView(四舍五入,我不确定结果如何)。在第二个 LinearLayout 中,我希望用户名和密码 EditText 水平相邻。最后,最后一个 LinearLayout 还应水平包含登录和注册按钮。

我不知道如何在第一个子 LinearLayout 中将 CardView 居中以及如何使 ImageView 变圆。

这是我拥有的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/gradient"
    android:gravity="center"
    tools:context=".LoginActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:orientation="horizontal"
        android:layout_weight="1">


        <androidx.cardview.widget.CardView
            android:id="@+id/imageView"
            android:layout_width="150dp"
            android:layout_height="match_parent"
            app:cardBackgroundColor="#090909"
            app:cardCornerRadius="250dp">


            <!--<androidx.cardview.widget.CardView
                android:layout_width="150dp"
                android:layout_height="145dp"
                android:gravity="center"
                app:cardCornerRadius="250dp">

            </androidx.cardview.widget.CardView>-->

        </androidx.cardview.widget.CardView>

        <!--<ImageView
            android:layout_width="150dp"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:scaleType="centerCrop"
            android:src="@drawable/login_logo" />-->

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <!--HERE WILL BE Username and Password-->

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">
    <!--HERE WILL BE Login and Sign up-->

    </LinearLayout>


</LinearLayout>

你的问题很简单。只需像这样更改线性布局的方向:

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" <!--change this-->
    android:layout_weight="1">


    <androidx.cardview.widget.CardView
        android:id="@+id/imageView"
        android:layout_width="150dp"
        android:layout_gravity="center"   <!-- and this-->
        android:layout_height="match_parent"
        app:cardBackgroundColor="#090909"
        app:cardCornerRadius="250dp">

    </androidx.cardview.widget.CardView>

    <!--<ImageView
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal"
        android:scaleType="centerCrop"
        android:src="@drawable/login_logo" />-->

</LinearLayout>

经过此操作后,您的卡片视图图像将位于中心

android:gravity 处理其子项的对齐方式,

android:layout_gravity 处理自身的对齐。

如果您想要更圆润的卡片视图,请修复卡片视图的高度。

为小尺寸的其他线性布局“2”和卡片视图权重为“1”的布局赋予权重。

谢谢!快乐编码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#abcdef"
    android:layout_gravity="center"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal">


        <androidx.cardview.widget.CardView
            android:id="@+id/imageView"
            android:layout_width="150dp"
            android:layout_height="match_parent"
            app:cardBackgroundColor="#090909"
            app:cardCornerRadius="150dp">


            <!--<androidx.cardview.widget.CardView
                android:layout_width="150dp"
                android:layout_height="145dp"
                android:gravity="center"
                app:cardCornerRadius="250dp">

            </androidx.cardview.widget.CardView>-->

        </androidx.cardview.widget.CardView>

        <!--<ImageView
            android:layout_width="150dp"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:scaleType="centerCrop"
            android:src="@drawable/login_logo" />-->

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:orientation="horizontal">

        <!--HERE WILL BE Username and Password-->

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:orientation="horizontal">
        <!--HERE WILL BE Login and Sign up-->

    </LinearLayout>
</LinearLayout>

[这是你的项目(图片)=> https://i.stack.imgur.com/68ARf.png]