Android 如何在一行上放置TextView和ImageView?

Android 如何在一行上放置TextView和ImageView?,android,Android,我将一个TextView和一个ImageView放在一行上,通常ImageView应该靠近TextView的右侧,两者都应该始终可见。但是当TextView有太多的单词时,ImageView将被挤出LinearLayout。顺便说一句,我只想在TextView中显示一行文字,如果文字太多,其余的文字可以替换为“..”后缀。对我的问题有什么想法吗?谢谢 <LinearLayout android:orientation="horizontal"

我将一个TextView和一个ImageView放在一行上,通常ImageView应该靠近TextView的右侧,两者都应该始终可见。但是当TextView有太多的单词时,ImageView将被挤出LinearLayout。顺便说一句,我只想在TextView中显示一行文字,如果文字太多,其余的文字可以替换为“..”后缀。对我的问题有什么想法吗?谢谢

   <LinearLayout
        android:orientation="horizontal"
        android:layout_gravity="left|center_vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/device_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:singleLine="true"
            tools:text="MacBookMacBookMacBookMacBookMacBookMacBookMacBook"
            android:textColor="#FF1D202C"
            android:textSize="16dp"
            />

        <ImageView
            android:id="@+id/device_online_state"
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:layout_gravity="left|center_vertical"
            android:foregroundGravity="center"
            android:src="@drawable/sr_icon_device_online"
            />

    </LinearLayout>


最后,我找到了解决方案,代码如下:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:orientation="horizontal">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:singleLine="true"
        android:textSize="20dp"
        android:text="12345678901234567000000000000000000" />

    <ImageView
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:src="@android:drawable/btn_radio" />
</LinearLayout>



您应该将ellipsize属性添加到您的TextView中,以使用

android:ellipsize="end"

为textview指定一个特定的宽度,然后添加

 android:ellipsize="end" 
 android:maxLines="1" 

如果您仍有疑问,请留下评论。

尝试使用
线性布局包装文本,并将其宽度设置为0dp,重量设置为1:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:orientation="horizontal"
    android:gravity="center_vertical">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_marginEnd="4dp"
        android:layout_marginStart="4dp"
        android:gravity="center_vertical"
        android:layout_weight="1.0">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLines="1"
            android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."/>

    </LinearLayout>

    <ImageView
        android:src="@android:drawable/ic_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"/>

</LinearLayout>

编辑:使用“权重”属性将允许线性布局调整到其他视图的宽度。

  • 将文本视图限制为一行
  • 添加android:ellipsize=“end”
  • 并用重量来限制它。无需额外的
    线性布局
  • 然后为其添加权重,使其占据图像后的剩余空间

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">
    
        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginStart="4dp"
            android:layout_marginEnd="4dp"
            android:layout_weight="1.0"
            android:gravity="center_vertical"
            android:maxLines="1"
            android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:src="@android:drawable/ic_delete" />
    
    </LinearLayout>
    
    
    
    但如何始终在LinearLayout或其他容器中显示这两个视图?谢谢!但是别忘了ImageView,它会被挤出容器视图的右边缘。@sunjinbo我想你应该先放置ImageView,然后再放置textview。接下来为textview指定一个特定的宽度,ellipsize=end,并设置maxline=1;你仍然有疑问,那么一定要让我知道我可以分享截图谢谢!我有一个尝试你的解决方案,如果文本视图有太多的话,这是可以的。但是如果有几个字,ImageView仍然是容器视图右侧的布局。两个视图之间都有一个很大的空白。似乎textview的布局宽度应该设置为“包装内容”。谢谢!但是,如果textview有几个单词,则这两个视图之间有一个很大的空白(@sunjinbo这应该是这样的。带文本和图像的空白区域可以。