如何让两个TextView处于同一行且分置屏幕两端 解决多设备适配问题
问题根因
你的布局异常确实是android:layout_marginStart="410dp"配置导致的:固定dp值无法适配不同宽度的安卓设备,当设备屏幕可用宽度小于410dp+右侧数字的宽度时,右侧TextView就会被挤出可视区域、换行甚至完全消失。
解决方案
下面给两种可行的适配方案,无需写死边距就能实现两个控件分别分布在行的两端:
方案1:沿用RelativeLayout实现
直接利用RelativeLayout的父布局对齐属性即可,修改后的XML代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingStart="10dp" android:paddingTop="10dp" android:paddingEnd="10dp"> <!-- 左侧姓名控件,贴父布局开始位置 --> <TextView android:textSize="13sp" android:textColor="@color/black" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:text="James Lingard" /> <!-- 右侧数字控件,贴父布局结束位置 --> <TextView android:textSize="13sp" android:textColor="@color/black" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:text="22" /> </RelativeLayout>
方案2:使用更推荐的ConstraintLayout实现
ConstraintLayout是目前安卓官方推荐的布局方式,适配性和性能都更优,实现代码如下:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingStart="10dp" android:paddingTop="10dp" android:paddingEnd="10dp"> <TextView android:id="@+id/tv_name" android:textSize="13sp" android:textColor="@color/black" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:text="James Lingard" /> <TextView android:id="@+id/tv_num" android:textSize="13sp" android:textColor="@color/black" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/tv_name" android:text="22" /> </androidx.constraintlayout.widget.ConstraintLayout>
兼容优化
如果存在左侧姓名过长可能挤压右侧数字的场景,可以给左侧TextView增加如下配置,过长姓名会自动省略末尾,不会出现重叠问题:
app:layout_constraintEnd_toStartOf="@id/tv_num" android:maxLines="1" android:ellipsize="end"
内容的提问来源于stack exchange,提问作者Quessts
相关产品推荐
相关产品推荐

