Android 在文本和图像视图之间留出空间

Android 在文本和图像视图之间留出空间,android,xml,android-layout,Android,Xml,Android Layout,我有以下xml。我有文本视图和图像视图。我希望在这些项目之间有一点空间(比如说20dp),但是基于textview的长度,它有时是重叠的 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:local="http://schemas.android.com/apk/res-auto" andr

我有以下xml。我有文本视图和图像视图。我希望在这些项目之间有一点空间(比如说20dp),但是基于textview的长度,它有时是重叠的

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical|left"
    android:id="@+id/myName"
    android:textSize="14sp" />
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/myName"
    android:gravity="center_vertical|right"
    android:layout_centerVertical="true"
    android:layout_alignParentRight="true"
    android:src="@drawable/ic_arrow_drop_down_red"
    android:paddingLeft="20dp" />
</RelativeLayout>

如果您只想在您的代码>文本视图< /代码>右侧(或任何其他方面)显示一个可绘制性,请考虑使用<代码> Android:DababrReWiels>代码>属性,而不是两个视图。

图像可以通过android:drawablePadding进一步分离。如果您的UI更复杂,那么这可能还不够,您将不得不使用两个视图


您可以像这样在这两个视图之间插入一个具有所需宽度的空视图(将布局更改为
LinearLayout

EDIT更改为线性布局后,空视图解决方案和
drawableRight
解决方案都可以工作,因此我正在编辑我的解决方案,使其看起来更漂亮。可支取权的所有信用都归@JuanCortes:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical|left"
    android:id="@+id/myName"
    android:textSize="14sp"
    android:drawableRight="@drawable/ic_arrow_drop_down_red"
    android:paddingLeft="20dp" />

</LinearLayout>

尝试使用
Framelayout
它可能会对您有所帮助

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical">
    <FrameLayout
        android:layout_width="match_parent"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:layout_height="wrap_content">
        <TextView

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|left"
            android:id="@+id/myName"
            android:textSize="14sp"
             />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/myName"
            android:layout_gravity="center_vertical|right"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:paddingLeft="20dp" />
    </FrameLayout>

</RelativeLayout>

为什么不使用这些属性

  • 边际
  • 填充物
  • 还是复合物

不幸的是,我仍然得到同样的结果。即使我删除了应用程序,清理并重建了它。嗯,摆脱相对布局,将其放在线性布局中。也要去掉
toLeftOf
和类似的,因为它们对于相对布局是唯一的。相对的布局让我毛骨悚然。是的,即使使用
drawableRight
也可以,不需要额外的视图或图像视图。请更新您的答案,然后我将其标记为答案。好的,酷。谢谢编辑。你需要开始学习使用线性布局,它们是我要征服的,我发现自己最适合使用它们,并保持对它们的控制。你可以随心所欲地嵌套它们,并使用权重赋予它们相对大小。这也是一个很好的方法。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical">
    <FrameLayout
        android:layout_width="match_parent"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:layout_height="wrap_content">
        <TextView

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|left"
            android:id="@+id/myName"
            android:textSize="14sp"
             />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/myName"
            android:layout_gravity="center_vertical|right"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:paddingLeft="20dp" />
    </FrameLayout>

</RelativeLayout>