【问题标题】:Apply styles to text in a string Android将样式应用于字符串 Android 中的文本
【发布时间】:2014-05-02 00:44:07
【问题描述】:

我正在尝试使用 SpannableString 创建一个字符串以应用颜色和粗体文本。

Spannable WordtoSpan = new SpannableString("Salida de la Capilla de María Auxiliadora\n00:00\nMarquesa de Sales\n00:00\nEspíritu Santo\n00:00\nSagasta\n00:00\nPza. Meneses\n00:00\nPozo Nuevo\n00:00\nPza. Ayuntamiento\n00:00\nSan Miguel\n00:00\nEstación de Penitencia, Iglesia San Miguel\n00:00\nÁnimas\n00:00\nMariano Hernández\n00:00\nEduardo Dato\n00:00\nRojas Marcos\n00:00\nPza. Meneses\n00:00\nCarrera\n00:00\nCalzadilla\n00:00\nGregorio María Ferro\n00:00\nMaría Auxiliadora\n00:00\nMarquesa de Sales\n00:00\nEntrada al Templo\n00:00\n");

tv.setText(WordtoSpan);

为了加快我的工作,我试图创造一个这样的条件:

if(WordtoSpan.toString().contains(":")){
// found the text string ":" (00:00)

WordtoSpan.setSpan(new ForegroundColorSpan(Color.rgb(140, 117, 189)), 42, 47, 
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
WordtoSpan.setSpan(new StyleSpan(Typeface.BOLD), 42,47, 47);
}else{
//Not found ":"
}

我会为所有字符串 00:00 实现粗体文本和颜色。有谁知道任何快速简便的方法?不去说句话来填满所有的 00:00?

问候!

【问题讨论】:

    标签: java android string styles contains


    【解决方案1】:

    找到 "00:00" 的索引,并将其设置为 span 的开始索引,并将结束索引设置为 "00:00" 的长度

        Spannable WordtoSpan = new SpannableString("Salida de la Capilla de María Auxiliadora\n00:00\nMarquesa de Sales\n00:00\nEspíritu Santo\n00:00\nSagasta\n00:00\nPza. Meneses\n00:00\nPozo Nuevo\n00:00\nPza. Ayuntamiento\n00:00\nSan Miguel\n00:00\nEstación de Penitencia, Iglesia San Miguel\n00:00\nÁnimas\n00:00\nMariano Hernández\n00:00\nEduardo Dato\n00:00\nRojas Marcos\n00:00\nPza. Meneses\n00:00\nCarrera\n00:00\nCalzadilla\n00:00\nGregorio María Ferro\n00:00\nMaría Auxiliadora\n00:00\nMarquesa de Sales\n00:00\nEntrada al Templo\n00:00\n");
    
        String search = new String("00:00");
        int length = search.length();
        String input = WordtoSpan.toString();
        int startIndex = input.indexOf(search);
        while(startIndex > length)
        {
            WordtoSpan.setSpan(new ForegroundColorSpan(Color.rgb(140, 117, 189)), startIndex, startIndex + length,
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            WordtoSpan.setSpan(new StyleSpan(Typeface.BOLD), startIndex, startIndex + length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            startIndex = input.indexOf(search, startIndex + length);
        }
    

    你必须遍历整个字符串的索引

    【讨论】:

    • 感谢您的回答。他向我展示了 Logcat 错误 -> dl.dropboxusercontent.com/u/29764789/logcat.png
    • 我复制了您的代码并显示错误:方法 setSpan (ForegroundColorSpan, int, int, int) 未定义 String 类型
    • 一些小修正。查看更新的答案。这应该工作。我现在测试了:)
    • 您建议我更改什么以获取相同的字符串 00:00、1:00 和 2:00?
    猜你喜欢
    • 2014-04-18
    • 1970-01-01
    • 2018-10-15
    • 2014-07-06
    • 2015-06-30
    • 2013-05-25
    • 1970-01-01
    • 2023-02-22
    相关资源
    最近更新 更多