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

gg0vcinb  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(524)

我试图在android应用程序的textview上显示字符串,我有以下字符串

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);

但显示屏上显示的是垂直方向上未对齐的冒号。为什么?
所以我用了一根可伸缩的绳子把冒号保持在中间

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_冒号,它会正确地出现在屏幕中央
如何在textview中使冒号位于屏幕中心?冒号不需要居中,但应该垂直对齐。

44u64gxh

44u64gxh1#

您使用空格的方式不起作用,因为用于textview的字体对于每个字符都有不同的宽度和大小,包括空格本身。如果你能加上 android:fontFamily="monospace" 对于xml,它将按照您的期望显示空间,但可能不是您期望的文本视图的字体。

00jrzges

00jrzges2#

如果你想这样(只要有一个),在文本视图中肯定没有意义,因为你要自定义他。通常,此方法有3种逻辑模式,每个模式都可以根据您的选择进行构建。
重新格式化文本以避免使用表格
使用webview呈现html表
为您的表使用本机小部件和容器(如tablelayout)

aoyhnmkz

aoyhnmkz3#

仅使用一种方法无法实现这一点 TextView 因为文本大小可能会独立变化。您可能需要一个额外的 TextView 裹在 ConstraintLayoutRelativeLayoutLinearLayout 应用了必要的约束条件。
诀窍(但可能是最糟糕的诀窍)是将冒号作为前缀附加到水果名称上,而不是作为后缀附加到水果标签上。
你可以用 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 属性设置所需的空间 labeldescription .

相关问题