3

这可能是一个错误,但我需要知道... :) 我正在开发一个 android 应用程序,在我想在一个 textview 中显示两种字体并发现这个非常有用,一个扩展字体跨度的自定义字体跨度,根据我的理解,我们正在使用两个词创建如下跨度

String firstWord = "first ";
String secondWord = "second";
// Create a new spannable with the two strings
Spannable spannable = new SpannableString(firstWord+secondWord);

然后使用我们的自定义跨度为该单词设置两种字体,如下所示

// Set the custom typeface to span over a section of the spannable object
spannable.setSpan( new CustomTypefaceSpan("sans-serif",CUSTOM_TYPEFACE), 0,              
firstWord.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan( new CustomTypefaceSpan("sans-serif",SECOND_CUSTOM_TYPEFACE),   rstWord.length(), secondWord.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

现在我的问题是,我有大量文本,所以如果我能够将跨度直接放在我的文本中,这对我们来说会更容易,是否可以像我需要的那样将跨度直接放在文本中<b>bold </b>使用我的自定义字体跨度,例如<typeface1> sample </typeface1> <typeface2> Doc </typeface2>.

我需要的是,直接将更改应用于文本设置跨度对文本的作用

这可能吗,如果可能的话,我需要在我的文本中写成跨度,我怎样才能做到这一点..还是我完全错了?

感谢你所做的一切

4

1 回答 1

2

答案很晚,但你要求的很容易。

例如,假设我们要将引号之间的所有内容更改为斜体字体。

    String s =  "\"Hello my name is Edward\" Hola, my nombre es Edward";        
    Pattern p = Pattern.compile("\"([^\"]*)\"");
    Matcher m = p.matcher(text);
    Spannable spannable = new SpannableString(s);
    while (m.find()) {        
      int textLocation = text.indexOf(m.group(1)); 

      // Set the custom typeface to span over a section of the spannable object       
       spannable.setSpan( new CustomTypefaceSpan("sans-serif",my_italic_font),
       textLocation-1, textLocation + m.group(1).length(),spannable.SPAN_EXCLUSIVE_EXCLUSIVE);                   

      // Set the text of a textView with the spannable object
      TextView textbox = (TextView) v.findViewById(R.id.cardtextbox);

    }
    textbox.setText( spannable );

结果s将是

“你好,我的名字是 Edward” Hola,我的昵称 Edward

现在,您可以使用正则表达式模式代替引号,例如<b>bold </b>;

之后您还可以使用简单的.replace();删除标签。

于 2013-08-21T18:42:04.933 回答