在 TextView 中间对齐按钮

Align button for right in the middle of TextView

我想像 WhatsApp 一样在 TextView 中间对齐按钮。 Android studio 的布局预览屏幕显示正确,但在 phone 处未对齐 TextView 的中间,对齐屏幕底部。

单独使用片段没有问题,但是当片段在 activity 内时,问题就出现了。我知道我的 activity 布局有误。

如何对齐发送按钮?

Whatsapp 按钮:

我在 Android Studio 预览中的按钮:

我的按钮在 phone:

我的片段布局:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:background="@color/colorBlue"
    android:orientation="vertical">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/userNames"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        android:ellipsize="end"
        android:gravity="start|center_vertical"
        android:maxLines="1"
        android:padding="10dp"
        android:scrollbars="horizontal"
        android:scrollHorizontally="true"
        android:text="Hello Nilu Pilu"
        android:textColor="@color/colorGreen" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:layout_gravity="center"
        android:layout_marginBottom="10dp"
        android:contentDescription="@null"
        android:src="@drawable/ic_log_out" />

</RelativeLayout>

我的activity布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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="fill_parent"
    android:layout_height="fill_parent"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:orientation="vertical">

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

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/colorPrimary"
            android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            android:theme="@style/ThemeOverlay.AppCompat.Dark"
            app:tabMode="scrollable">

            <androidx.appcompat.widget.SearchView
                android:id="@+id/search_action"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:contentDescription="@null"
                android:iconifiedByDefault="false"
                android:tint="@color/white"
                app:defaultQueryHint="@string/searchForName"
                app:iconifiedByDefault="false"
                app:queryHint="@string/searchForName"
                app:srcCompat="@drawable/ic_search_24" />

        </androidx.appcompat.widget.Toolbar>

        <LinearLayout
            android:id="@+id/share_list_fragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            tools:ignore="MergeRootFrame" />
    </LinearLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

无需使用嵌套 RelativeLayout 您只需使用单个 RelativeLayout

即可实现

Try this using RelativeLayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:background="@color/colorBlue"
    android:orientation="vertical">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/userNames"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        android:ellipsize="end"
        android:gravity="start|center_vertical"
        android:maxLines="1"
        android:padding="10dp"
        android:scrollbars="horizontal"
        android:scrollHorizontally="true"
        android:text="Hello Nilu Pilu"
        android:textColor="@color/colorGreen" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:layout_gravity="center"
        android:layout_marginBottom="10dp"
        android:contentDescription="@null"
        android:src="@drawable/ic_log_out" />

</RelativeLayout>

Try this using ConstraintLayout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
    android:background="@color/colorBlue"
    android:orientation="vertical">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/userNames"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        android:ellipsize="end"
        android:gravity="start|center_vertical"
        android:maxLines="1"
        android:padding="10dp"
        android:scrollbars="horizontal"
        android:scrollHorizontally="true"
        android:text="Hello Nilu Pilu"
        android:textColor="@color/colorGreen"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginBottom="10dp"
        android:contentDescription="@null"
        android:src="@drawable/ic_log_out"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

输出

我建议使用 ConstraintLayout 布局而不是 RelativeLayout,这是您使用 ConstraintLayout 的代码,它将完美运行。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/emptyListColor"
    android:orientation="vertical">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/bottomView"
        android:layout_height="0dp" />

    <RelativeLayout
        android:id="@+id/bottomView"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        android:padding="5dp">

        <TextView
            android:id="@+id/userNames"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start|center_vertical"
            android:ellipsize="end"
            android:gravity="start|center_vertical"
            android:maxLines="1"
            android:padding="5dp"
            android:scrollbars="horizontal"
            android:scrollHorizontally="true"
            android:textColor="@color/white" />

    </RelativeLayout>

    <ImageView
        android:id="@+id/button"
        android:layout_width="50dp"
        android:layout_height="50dp"
        app:layout_constraintTop_toTopOf="@+id/bottomView"
        app:layout_constraintBottom_toTopOf="@+id/bottomView"
        app:layout_constraintEnd_toEndOf="@+id/bottomView"
        android:layout_gravity="center"
        android:layout_margin="10dp"
        android:background="@drawable/send_circle"
        android:contentDescription="@null"
        android:src="@drawable/attach_send2" />

</androidx.constraintlayout.widget.ConstraintLayout>