如何在 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
包裹在 ConstraintLayout
或 RelativeLayout
或 LinearLayout
中并应用必要的约束。
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)
我正在尝试在 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
包裹在 ConstraintLayout
或 RelativeLayout
或 LinearLayout
中并应用必要的约束。
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)