spannablestring 不适用于以编程方式创建的按钮
spannablestring is not working for programmatically created button
我知道 SpannableString 可以在一个文本视图中设置不同的文本大小,但如果以编程方式添加文本视图,则它不起作用。
String s = "Best Ever";
SpannableString ss1 = new SpannableString(s);
ss1.setSpan(new RelativeSizeSpan(2f), 0, 4, 0); // set size
ss1.setSpan(new ForegroundColorSpan(Color.RED), 0, 4, 0); // set color
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(ss1);
如您所见,它适用于 API17 的 Button 和 TextView,但仅适用于 API21
的 TextView
有趣!我注意到 API 21 上的按钮全部大写..所以删除所有大写.
默认情况下,Material 按钮的样式设置为全部大写显示文本。但是,用于大写的 AllCapsTransformationMethod ( bug details ) 中存在一个错误,导致它丢弃 Spannable 数据。
您可以通过禁用 allCaps 模式来覆盖默认按钮样式,对于 Material 样式的小部件默认情况下是这样。
来自代码,
txt.setAllCaps(false);
来自 XML,
<View
...
android:textAllCaps="false" />
我知道 SpannableString 可以在一个文本视图中设置不同的文本大小,但如果以编程方式添加文本视图,则它不起作用。
String s = "Best Ever";
SpannableString ss1 = new SpannableString(s);
ss1.setSpan(new RelativeSizeSpan(2f), 0, 4, 0); // set size
ss1.setSpan(new ForegroundColorSpan(Color.RED), 0, 4, 0); // set color
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(ss1);
如您所见,它适用于 API17 的 Button 和 TextView,但仅适用于 API21
的 TextView有趣!我注意到 API 21 上的按钮全部大写..所以删除所有大写.
默认情况下,Material 按钮的样式设置为全部大写显示文本。但是,用于大写的 AllCapsTransformationMethod ( bug details ) 中存在一个错误,导致它丢弃 Spannable 数据。
您可以通过禁用 allCaps 模式来覆盖默认按钮样式,对于 Material 样式的小部件默认情况下是这样。
来自代码,
txt.setAllCaps(false);
来自 XML,
<View
...
android:textAllCaps="false" />