spannablestring不适用于以编程方式创建的按钮

时间:2015-04-24 09:06:34

标签: android textview spannablestring

我知道SpannableString可以在一个textview中设置不同的文本大小,但如果以编程方式添加textview,它就无法正常工作。

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

1 个答案:

答案 0 :(得分:27)

正如您所看到的,它适用于API17的Button和TextView,但仅适用于API21上的TextView

有趣!我注意到API 21上的按钮都是大写的。所以要删除所有大写字母。

默认情况下,“材质”按钮的样式设置为以全部大写字母显示文本。但是,AllCapsTransformationMethod中存在一个用于大写的错误,导致它丢弃Spannable数据。

您可以通过禁用allCaps模式覆盖默认按钮样式,默认情况下,对于Material样式的小部件,这是真实的。

来自代码,

txt.setAllCaps(false);

来自XML,

<View
    ...
    android:textAllCaps="false" />