Android RelativeLayout 中的 TextView 无法正常运行

Android TextView inside RelativeLayout not acting properly

所以我有一个包含多个小部件的自定义 Header 视图。我的想法是使用 ImageView(图标)对齐 parent 开始和 ImageButton(菜单)对齐 parent 结束的框架布局。此外,ImageView 右侧的 TextView(标题)。它们应该始终可见。

在 ImageView(icon) 的右侧应该有一个 TextView(标题),其文本应该根据右侧其他小部件的可见性展开。

所以从左到右的顺序是这样的:ImageView(图标)- TextView(标题)- ImageView(未读消息)- ImageView(电池)- ImageButton(菜单)

问题是,来自 TextView 的文本位于其右侧的小部件后面,就像它在这张图片上可见:

这是我的 xml 预览:

这是实际的 xml:

<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:layout_width="match_parent"
android:layout_height="58dp"
android:background="@color/view_controller_header">

<FrameLayout
    android:id="@+id/frame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_centerInParent="true"
    android:layout_gravity="center"
    android:layout_margin="10dp">

    <ImageView
        android:id="@+id/imageViewIC"
        android:layout_width="@dimen/view_controller_header_icon_width"
        android:layout_height="@dimen/view_controller_header_icon_height"
        android:layout_gravity="center" />

    <TextView
        android:id="@+id/textViewKK"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:focusable="false"
        android:gravity="center"
        android:padding="10dp"
        android:shadowColor="@color/text_shadow"
        android:shadowDx="-1"
        android:shadowDy="-1"
        android:shadowRadius="1"
        android:textColor="@color/main_text_color"
        android:textSize="@dimen/view_controller_header_kk_texSize"
        android:visibility="gone" />

    <ProgressBar
        android:id="@+id/progressBarVC"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:visibility="gone" />

</FrameLayout>

<TextView
    android:id="@+id/textViewDName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_gravity="center"
    android:layout_marginRight="@dimen/view_controller_header_margin2"
    android:layout_toRightOf="@id/frame"
    android:ellipsize="end"
    android:fontFamily="sans-serif"
    android:gravity="center|left"
    android:maxLines="2"
    android:textColor="@color/main_text_color"
    android:textSize="17sp"
    tools:text="This is the text that is too long .........." />


<ImageButton
    android:id="@+id/imgSubMenu"
    android:layout_width="50dp"
    android:layout_height="match_parent"
    android:layout_alignParentEnd="true"
    android:layout_gravity="center"
    android:background="?android:selectableItemBackground"
    android:scaleType="center"
    android:src="@drawable/ic_more_vert_white_24dp" />

<LinearLayout
    android:id="@+id/bat"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_toStartOf="@id/imgSubMenu"
    android:gravity="center"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/imageViewBattery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:scaleType="centerInside"
        android:visibility="visible"
        app:srcCompat="@drawable/ic_battery_full" />

    <TextView
        android:id="@+id/textViewBattery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:visibility="visible"
        tools:text="100%" />

</LinearLayout>

<TextView
    android:id="@+id/unreadMessages"
    android:layout_width="22dp"
    android:layout_height="22dp"
    android:layout_centerInParent="true"
    android:layout_toStartOf="@id/bat"
    android:background="@color/color_widget_security_back_red"
    android:gravity="center"
    android:textStyle="bold"
    android:visibility="visible"
    tools:text="2" />

任何想法,为什么这段文字在那些小部件后面?如果电池和未读消息可见,我希望它调整大小,比如它分成两行而不是一行,或者显示...如果它太长..

可能您忘记添加如下属性文本:

android:layout_toLeftOf

android:layout_toLeftOf="@+id/imgSubMenu"

根据您的要求,您希望显示从右到左图标和从左到右菜单图标的文本,但是您添加了一个相对引用到右而不是左,因此它与右侧菜单图标重叠