繁体   English   中英

如何在android布局中的同一列上右对齐

[英]How to align to right on the same column in android layout

我有 2 个文本视图,我希望它们在同一列水平对齐。 我试图android:layout_toRightOf="@id/textName"但它似乎在底部而不是textName旁边

在此处输入图像描述

预期输出: MovieDate应与MovieName对齐

在此处输入图像描述

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_height="wrap_content">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="5dp"
        android:layout_marginBottom="5dp"
        app:cardBackgroundColor="#FFFFFF"
        app:cardCornerRadius="10dp"
        app:cardElevation="10dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/imageview"
                android:layout_width="50dp"
                android:layout_height="60dp"
                android:layout_margin="10dp"
                android:src="@drawable/candy" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:gravity="center"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/textName"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:text="Movie Name"
                    android:textColor="#000"
                    android:layout_marginRight="100dp"
                    android:textSize="15sp"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/textdate"
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="Movie Date"
                    android:textSize="15sp"
                    android:layout_toRightOf="@id/textName"/>


            </LinearLayout>

        </LinearLayout>

    </androidx.cardview.widget.CardView>


</LinearLayout>

layout_toRightOf是一个RelativeLayout参数,它是为LinearLayout的子级设置的无操作集,因此您可以安全地删除这条线,它什么都不做......

作为两个TextView的父级的LinearLayout应该设置android:orientation="horizontal" ,这是为了舒尔......但我看到你的代码中有很多问题和潜在的改进,所以也许你也应该设置android:layout_height="wrap_content"LinearLayoutandroid:layout_height="wrap_content"和外部的android:gravity="center_vertical"CardView的第一个孩子),也删除android:layout_weight="2" ,因为此布局具有match_parent宽度,所以它是不必要的

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical">

        <ImageView
            android:id="@+id/imageview"
            android:layout_width="50dp"
            android:layout_height="60dp"
            android:layout_margin="10dp"
            android:src="@drawable/candy" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textName"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:text="Movie Name"
                android:textColor="#000"
                android:layout_marginRight="100dp"
                android:textSize="15sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/textdate"
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:text="Movie Date"
                android:textSize="15sp"/>

        </LinearLayout>

    </LinearLayout>

使用 LinearLayout 并将方向设置为水平。 看到这个👇👇

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
   xmlns:tools="http://schemas.android.com/tools" 
   android:layout_width="match_parent" 
   android:layout_height="match_parent" 
   android: orientation="horizontal" 
   tools:context=".MainActivity">
   <TextView android:layout_width="0dp" 
        android:layout_height="wrap_content"
        android:layout_weight="50" 
        android:gravity="center" 
        android:layout_gravity="center_vertical"
        android:text="Movie Name"/>
    <TextView android:layout_width="0dp" 
        android:layout_height="wrap_content"
        android:layout_weight="50" 
        android:gravity="center" 
        android:layout_gravity="center_vertical"
        android:text="Movie Date"/>
</LinearLayout>

值为 50 的 layout_weight 属性为每个孩子分配相等的部分,即每个孩子 50%

在我看来,LinearLayout 是最简单的解决方案,但您也可以尝试 ConstraintLayout。

<androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp"
        app:cardBackgroundColor="#FFFFFF"
        app:cardCornerRadius="10dp"
        app:cardElevation="10dp">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp">

            <ImageView
                android:id="@+id/imageview"
                android:layout_width="50dp"
                android:layout_height="60dp"
                android:layout_marginEnd="10dp"
                android:src="@drawable/candy"
                app:layout_constraintEnd_toStartOf="@id/textName"
                app:layout_constraintHorizontal_chainStyle="spread"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />


            <TextView
                android:id="@+id/textName"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:text="Movie Name"
                android:textColor="#000"
                android:textSize="15sp"
                android:textStyle="bold"
                app:layout_constraintEnd_toStartOf="@id/textdate"
                app:layout_constraintStart_toEndOf="@id/imageview"
                app:layout_constraintTop_toTopOf="parent" />

            <TextView
                android:id="@+id/textdate"
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="100dp"
                android:text="Movie Date"
                android:textSize="15sp"
                app:layout_constraintStart_toEndOf="@+id/textName"
                app:layout_constraintTop_toTopOf="parent" />


        </androidx.constraintlayout.widget.ConstraintLayout>

    </androidx.cardview.widget.CardView>

您可以使用单个ConstraintLayout并实现相同的目标,而不是使用多个LinearLayout 这是修改后的代码:

<?xml version="1.0" encoding="utf-8"?>
    <androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="5dp"
        android:layout_marginBottom="5dp"
        app:cardBackgroundColor="#FFFFFF"
        app:cardCornerRadius="10dp"
        app:cardElevation="10dp">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/imageview"
                android:layout_width="50dp"
                android:layout_height="60dp"
                android:layout_margin="10dp"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                android:src="@drawable/candy" />
                <TextView
                    android:id="@+id/textName"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:text="Movie Name"
                    android:textColor="#000"
                    android:layout_marginRight="100dp"
                    android:textSize="15sp"
                    android:textStyle="bold"
                    app:layout_constraintTop_toTopOf="@id/imageview"
                    app:layout_constraintStart_toEndOf="@id/imageview"/>

                <TextView
                    android:id="@+id/textdate"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:text="Movie Date"
                    android:textSize="15sp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toTopOf="@id/textName"
                    app:layout_constraintStart_toEndOf="@id/textName"/>
        </androidx.constraintlayout.widget.ConstraintLayout>

    </androidx.cardview.widget.CardView>
// instead of Linearlayout use RelativeLayout and remove layout gravity.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="5dp"
        android:layout_marginBottom="5dp"
        app:cardBackgroundColor="#FFFFFF"
        app:cardCornerRadius="10dp"
        app:cardElevation="10dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/imageview"
                android:layout_width="50dp"
                android:layout_height="60dp"
                android:layout_margin="10dp"
                android:src="@drawable/googleg_disabled_color_18" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:orientation="vertical">

            <TextView
                android:id="@+id/textName"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:text="Movie Name"
                android:textColor="#000"
                android:textSize="15sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/textdate"
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/textName"
                android:text="Movie Date"
                android:layout_marginStart="15dp"
                android:textSize="15sp" />


        </RelativeLayout>

    </LinearLayout>

</androidx.cardview.widget.CardView>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM