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

Posted

技术标签:

【中文标题】spannablestring 不适用于以编程方式创建的按钮【英文标题】:spannablestring is not working for programmatically created button 【发布时间】:2015-07-02 19:18:02 【问题描述】:

我知道 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); 

【问题讨论】:

什么api版本? 5+? 他们在 v5 中对其进行了更改,***.com/questions/29007746/… 【参考方案1】:

如您所见,它适用于 API17 的 Button 和 TextView,但仅适用于 API21 的 TextView

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

默认情况下,Material 按钮的样式是全部大写的。但是,用于大写的 AllCapsTransformationMethod (bug details) 中存在一个错误,导致它丢弃 Spannable 数据。

您可以通过禁用 allCaps 模式来覆盖默认按钮样式,这对于 Material 样式的小部件默认为 true。

来自代码,

txt.setAllCaps(false);

来自 XML,

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

【讨论】:

谢谢!快要撞到我的头了! 请更新您的答案,因为没有android:allCaps 属性。我发现android:textAllCaps 是正确的。 @isnotmenow 感谢您的发起,我更新了我的答案:) 我已经尝试了一天的时间来解决这个问题。我知道这会是一件愚蠢的事情。就我而言,我试图将小数缩小 50%。谁能想到您可以在 Android 中将数字大写! 这是 textAllCaps 属性的一个已知错误,特别是 AllCapsTransformationMethod。 code.google.com/p/android/issues/detail?id=67509@もっくん

以上是关于spannablestring 不适用于以编程方式创建的按钮的主要内容,如果未能解决你的问题,请参考以下文章

Magento - 以编程方式添加的捆绑产品不适用于购物篮/前端

单击手势不适用于以编程方式添加的子视图

用户输入不适用于在表格视图中以编程方式添加的文本字段

以编程方式将PC置于睡眠模式

Azure 条件访问不适用于令牌获取请求?

按钮操作不适用于 subView