You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一行实现TextView内字符串的左对齐与右对齐?

同一行内实现TextView字符串左右对齐的解决方案

方案一:使用LinearLayout包裹两个TextView(最可靠)

这种方法简单直接,适配性强,能彻底规避单个TextView内的排版局限:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_vertical">

    <TextView
        android:id="@+id/tv_left"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Left"
        android:gravity="left"/>

    <TextView
        android:id="@+id/tv_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Right"
        android:gravity="right"/>
</LinearLayout>

代码中直接给两个TextView设置对应文本即可,无需复杂的Span处理。

方案二:单个TextView内实现(适合必须用单个TextView的场景)

AlignmentSpan是段落级的排版控件(以换行符为段落分隔),所以同一行内无法用它实现左右对齐,可通过以下两种方式解决:

方法1:利用制表符+TabStopSpan

通过设置制表位,让右侧文本直接跳到TextView最右端:

String leftText = "Left";
String rightText = "Right";
// 用制表符分隔左右文本
SpannableString spannable = new SpannableString(leftText + "\t" + rightText);
// 需在TextView测量完成后获取宽度,所以用post延迟执行
textView.post(() -> {
    int tabWidth = textView.getWidth() - textView.getPaddingLeft() - textView.getPaddingRight();
    spannable.setSpan(new TabStopSpan.Standard(tabWidth),
            leftText.length(), leftText.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(spannable);
});

方法2:计算填充空格数(兼容性一般)

根据字体宽度计算需要填充的空格数,用空格将左右文本隔开:

String leftText = "Left";
String rightText = "Right";
textView.post(() -> {
    // 获取TextView的可用宽度
    int availableWidth = textView.getWidth() - textView.getPaddingLeft() - textView.getPaddingRight();
    // 计算左右文本和单个空格的宽度
    Paint paint = textView.getPaint();
    float leftWidth = paint.measureText(leftText);
    float rightWidth = paint.measureText(rightText);
    float singleSpaceWidth = paint.measureText(" ");
    // 计算需要填充的空格数量
    int spaceCount = (int) ((availableWidth - leftWidth - rightWidth) / singleSpaceWidth);
    // 拼接最终字符串
    String spaceStr = String.format("%" + spaceCount + "s", "");
    textView.setText(leftText + spaceStr + rightText);
});

注意:这种方法受字体、字符宽度影响较大,不同设备上可能出现排版偏差,优先推荐方案一。


内容的提问来源于stack exchange,提问作者KyluAce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:32:42