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

Ven*_*nky 11 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); 
Run Code Online (Sandbox Code Playgroud)

Kin*_*ses 27

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

有趣!我注意到API 21上的按钮是全部大写的.所以删除所有大写字母.

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

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

从代码,

txt.setAllCaps(false);
Run Code Online (Sandbox Code Playgroud)

来自XML,

<View
    ...
    android:textAllCaps="false" />
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我正要敲打我的脑袋! (2认同)