如何在 android 的文本视图中对齐冒号?

How to align colons in a textview in android?

我正在尝试在 android 应用程序的文本视图中显示字符串 我有以下字符串

String Fruityellow = " Mango" ;
String Fruitred = " Apple" ;
String Fruitgreen = " Guava" ;
String Fruitpink = " Pomegranate" ;

So i append them and print them on textview
output_display = "Fruityellow     :" + Fruityellow + "\r\n" + 
         "Fruitred        :" + Fruitred + "\r\n" +
         "Fruitgreen      :" + Fruitgreen + "\r\n" +
         "Fruitpink       :" + Fruitpink + "\r\n" );

text_view.settext(output);

但是显示器垂直显示未对齐个冒号。为什么?

所以我使用 spannable 字符串将冒号放在中间

SpannableString span_colon      = new SpannableString(":");
span_colon.setSpan((new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER)), 0, span_colon.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);

spanned total_display = (Spanned)TextUtils.concat("Fruityellow",span_colon,Fruityellow,
"\r\nFruitred",span_colon,Fruitred,
"\r\nFruitgreen",span_color,Fruitgreen,
"\r\nFruitpink",span_color,Fruitpink);

 text_view.settext(total_display );

当前输出为:

Fruityellow:Mango
Fruitred:Apple
Fruitgreen:guava
Fruitpink:Pomegranate

预期输出为:

Fruityellow     : Mango
Fruitred        : Apple
Fruitgreen      : guava
Fruitpink       : Pomegranate

如果我只是打印 span_colon 它正确地出现在屏幕中央

如何在文本视图中让冒号位于屏幕中央? 冒号不需要居中,但应该垂直对齐。

您使用 space 的方法无效,因为用于 TextView 的字体对于每个字符(包括 space 本身)具有不同的宽度和大小。如果您可以将 android:fontFamily="monospace" 添加到 xml,那么它将按您的预期显示 space,但它可能不是您期望的 TextView 字体。

这不能仅使用一个 TextView 来实现,因为文本大小可能会独立变化。您可能需要额外的 TextView 包裹在 ConstraintLayoutRelativeLayoutLinearLayout 中并应用必要的约束。

The trick (but may be a worst trick) is to append the colon as a prefix to the fruit name instead of as a suffix to the fruit label.

您可以使用 SpannableStringBuilder 来实现。

val label  = SpannableStringBuilder()
label.append("\nFruit Yellow ")
label.append("\nFruit Red ")
label.append("\nFruit Green ")

val des = SpannableStringBuilder()
des.append(": Mango\n")
des.append(": Apple\n")
des.append(": Guava\n")

binder.msgViewLabel.text = label.toString()
binder.msgViewDes.text = des.toString()

XML 部分 - UI

<LinearLayout
   android:id = "@+id/container_layout"
   android:layout_width = "match_parent"
   android:layout_height = "wrap_content"
   android:orientation = "horizontal"
   android:weightSum = "1">

  <androidx.appcompat.widget.AppCompatTextView
     android:id = "@+id/msg_view_label"
     android:layout_width = "0dp"
     android:layout_height = "wrap_content"
     android:layout_weight = "0.5"
     android:textColor = "@android:color/holo_green_dark"/>

  <androidx.appcompat.widget.AppCompatTextView
     android:id = "@+id/msg_view_des"
     android:layout_width = "0dp"
     android:layout_height = "wrap_content"
     android:layout_weight = "0.5"
     android:textColor = "@android:color/holo_green_dark"/>
</LinearLayout>

输出

注意: 您可以调整 layout_weight 属性 以设置 label 和 [=20] 所需的 space =].

如果你想成为那样(就拥有一个),那肯定没有意义 文本视图,因为您要自定义他。 总的来说,这个方法有3种逻辑模式,你可以根据自己的选择来构建。

  • 重新格式化您的文本以避免 tables
  • 使用 WebView 呈现您的 HTML table
  • 为您的 table
  • 使用本机小部件和容器(例如 TableLayout)