android - 按钮上的 SpannableString 不适用于 API21?

标签 android android-5.0-lollipop spannablestring

我尝试使用 SpannableString 在切换按钮上放置一个图标。并在 API17 上工作,但不在 API21 上工作。

spanable string on button and text

如您所见,它适用于 API17 的 Button 和 TextView,但仅适用于 API21 的 TextView(“Z”未被图标替换)。

private SpannableStringBuilder createSpanIcon(int rid, String name){
    Drawable d = getActivity().getResources().getDrawable(rid);
    d.setBounds(0,0,20,20);
    ImageSpan imageSpan = new ImageSpan(d, DynamicDrawableSpan.ALIGN_BASELINE);
    SpannableStringBuilder builder = new SpannableStringBuilder();

        builder.append("Z\n")
               .append(name)
               .setSpan(imageSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        /* This give same result    
        builder.append("Z", imageSpan, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
               .append("RED", new ForegroundColorSpan(Color.RED), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
               .append("\n" + name);
        */

        return builder;
}

    Button btn = (Button)v.findViewById(R.id.myButton);
    SpannableStringBuilder _test = createSpanIcon(R.drawable.tc_g, "Click Me!" );
    btn.setText( _test );

    TextView txt = (TextView)v.findViewById(R.id.myText);
    SpannableStringBuilder _test2 = createSpanIcon(R.drawable.tc_g, "I'm text" );
    txt.setText( _test2 );

注意:我不想使用 setCompoundDrawablesWithIntrinsicBounds,因为我要把图标放在 ToggleButton 上,所以 setTextOn setTextOff 将为我交换图标。

有人知道为什么吗?有什么解决办法吗?

最佳答案

您可以通过禁用 allCaps 模式来解决此问题,对于 Material 样式的按钮,默认情况下该模式为 true

来自代码,

txt.setAllCaps(false);

来自 XML,

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

关于android - 按钮上的 SpannableString 不适用于 API21?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28778456/

相关文章:

android - 有没有一种简单的方法可以判断哪个布局被膨胀以在适配器中创建转换 View ?

android - "v17 leanback library"(android tv 支持库)可以支持 2.x 或 4.x 设备吗?

android - 应用程序内容位于 android L 中的导航栏后面

android - Lollipop 上的 TextView fromHtml 链接断开

android - 带有 ImageSpan 的 TextView 弄乱了行高

Android:更改 Spannable String 中换行符的高度不起作用

java - java文件在Android中编译后的注释会怎样?

java - textView 中的 Android HTML,图像大小

android - 在android中滚动 ListView 时获取闪烁布局的背景?

Android Lollipop 5.0.1 通话时长错误