android - 在不拉伸(stretch)背景的情况下,在 ListView 上对齐两个 TextView,一左一右

标签 android android-layout android-listview alignment textview

所以我在 ListView 中每行有两个 TextViews。一个应该左对齐,另一个右对齐。两个 TextViews 都有一个圆角矩形作为背景,它应该只是将文本包裹在里面。所以我想到了这个:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/text_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:background="@drawable/bubble_purple"
        android:gravity="center" >
    </TextView>

    <TextView
        android:id="@+id/text_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@id/text_right"
        android:background="@drawable/bubble_blue"
        android:gravity="center" >
    </TextView>
</RelativeLayout>

它看起来适合长文本,但不适合较短的消息:

enter image description here

我也尝试过这样的 LinearLayout:

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

    <TextView
        android:id="@+id/text_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@drawable/bubble_blue"
        android:gravity="center" >
    </TextView>

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/text_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@drawable/bubble_purple"
        android:gravity="center">
    </TextView>
</LinearLayout>

这适用于短消息,但不适用于长消息:

enter image description here

是否可以通过某种方式测量 TextViews 的组合宽度并以编程方式在这些布局之间切换,或者我在这里做错了什么?

最佳答案

这是否如您所愿?

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

<TextView
    android:id="@+id/text_right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0.5"
    android:background="@drawable/bubble_blue"
    android:text="2"
    android:gravity="center" >
</TextView>

<TextView
    android:id="@+id/text_left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0.5"
    android:background="@drawable/bubble_purple"
    android:text="9"
    android:gravity="center" >
</TextView>
</LinearLayout>

通过添加 layout_weight 参数并使它们相等,您可以告诉布局引擎在两个 View 之间平均分配任何空闲空间。如果你希望左边的 block 比右边的 block 大,你可以给它更大的权重。

编辑:也许这样更好:

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

<LinearLayout 
    android:id="@+id/text_left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0.5" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#456"
        android:text="5 + 1"
        android:gravity="center" >
    </TextView> 

</LinearLayout>

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text=" = " >
</TextView>

<LinearLayout 
    android:id="@+id/text_right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layoutDirection="rtl"
    android:layout_weight="0.5">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#856"
            android:text="6"
            android:gravity="center" >
        </TextView>

</LinearLayout>

</LinearLayout>

关于android - 在不拉伸(stretch)背景的情况下,在 ListView 上对齐两个 TextView,一左一右,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927024/

相关文章:

android - 使按钮的背景颜色发生变化并在单击后保持不变

java - Java 是否存在通用或 "fat"类文件?

android - android studios中 Unresolved 依赖错误。android studio的第一次用户

android - 确保服务在 Activity 部分之前执行

android - onNestedScroll 未使用自定义 BottomNavigationViewBehavior 调用

android - RecyclerView + Glide 显示结果一团糟

java - eclipse更新时出错

java - 从线性布局中获取子元素

android - 在 Android 中维度 %p 是什么意思?

Android convertView,用还是不用?