【问题标题】:Partially left aligned and partially right aligned text in a TextView. Why isn't this working?TextView 中部分左对齐和部分右对齐的文本。为什么这不起作用?
【发布时间】:2013-01-27 20:16:12
【问题描述】:

我遇到了一个文本视图问题,其中我有一些应该左对齐的文本和一些应该右对齐的文本。

这是我的尝试。

String LeftText = "LEFT";
String RightText = "RIGHT";


String resultText = LeftText + "  " + RightText;
SpannableString styledResultText = new SpannableString(resultText);
styledResultText.setSpan(new AlignmentSpan.Standard(Alignment.ALIGN_OPPOSITE), LeftText.length() + 1, LeftText.length() + 2 + RightText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(styledResultText);

这是 textview 的 xml。

<TextView
    android:id="@+id/titleBar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" 
/>

但是这不起作用。所有文本都左对齐。我在这里错过了什么?

【问题讨论】:

  • 是什么阻止您创建一个左对齐的 TextView 和另一个右对齐的 TextView?
  • 问题是我希望能够滚动浏览它。我现在意识到我可以为此使用滚动视图..

标签: java android android-widget


【解决方案1】:

如果 rightText 不需要在边缘右对齐,您可以使用 TabStopSpan 很容易地解决问题。

final TextView tv = ...
int column = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                (float) 200.0, getResources().getDisplayMetrics());

SpannableStringBuilder textspan = new SpannableStringBuilder("Charges\nPrice\t$25.00\nShipping\t$155.08\nTax\t$5.11\n");
textspan.setSpan(new TabStopSpan.Standard(column), 0, textspan.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(textspan);

如果您希望它靠近文本视图的右边缘,您可以使用全局布局侦听器在布局后设置制表位。然后你可以使用 textview 的宽度在边缘附近设置一个制表位。

如果您希望它正确对齐,您只需要创建一个扩展 ReplacementSpan 的类,它将为您证明文本的合理性。..

【讨论】:

    【解决方案2】:

    我自己也走上了这条路……不幸的是,根据我的研究,我认为单行文本不可能有两个对齐范围。您必须将其拆分为两个不同的 TextView 对象。

    【讨论】:

    • 好的,那么我要问一个反问题。我希望能够拖动此视图,以便它可以容纳比屏幕一次查看更多的行。但是用户可以点击并拖动。如果您只有一个文本视图,这很容易做到。但是我将如何使用 2 个文本视图来做到这一点?
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多