string.xml是一个字符串资源,为程序提供了可格式化和可选样式的字符串。

一般的字符串定义:

   
   
   
   
  1. <string name="hello_kitty">Hello kittystring> 

资源引用

在xml中:@string/hello_kitty

在java中:R.string.hello_kitty

一、当字符串有引号时

    
    
    
    
  1. <string name="good_example">"This'll work"string> 
  2. <string name="good_example_2">This\'ll also workstring> 
  3. <string name="bad_example">This doesn't workstring> 
  4. <string name="bad_example_2">XML encodings don't workstring> 

如果字符串中有单引号,则要将整个字符串用双引号包起来,或者使用转义\'

二、当字符串需要用String.format格式化时

     
     
     
     
  1. <string name="hello_kitty">Hello %1$s kittystring> 

%1$s : 1表示占第一位,s表示字符串,d表示数字

java代码:

      
      
      
      
  1. String format=String.format(R.string.hello_kitty,"your"); 

三、当字符串有html标记时

kitty 加粗

       
       
       
       
  1. <string name="hello_kitty">Hello <b>kittyb>string> 

java代码:

        
        
        
        
  1. Resources res = getResources(); 
  2. String kitty = res.getString(R.string.hello_kitty); 
  3. //textView.setText(kitty); 

四、当字符串又需要格式化,又有样式的时候

         
         
         
         
  1. <string name="hello_kitty"><i>Helloi><b> %1$s kittyb>!string> 

上面是错误的写法,因为参考原文一段话

In this formatted string, a  element is added. Notice that the opening bracket is HTML-escaped, using the< notation.

所以我们需要这么写

          
          
          
          
  1. <string name="hello_kitty"><i>Hello</i><b> %1$s kitty</b>!string> 

java代码:

           
           
           
           
  1. String format = String.format(res.getString(R.string.hello_kitty), 
  2.                 "your"); 
  3.         Spanned html = Html.fromHtml(format); 
  4. textView.setText(html); 

Html.fromHtml()会解析所有html标记,但如果String.format()的参数中有html标记但又不想被Html解析

比如 your,就要对参数进行编码

java代码:

             
             
             
             
  1. Resources res = getResources(); 
  2. String encode = TextUtils.htmlEncode("your"); 
  3. String format = String.format(res.getString(R.string.hello_kitty), 
  4.                 encode); 
  5. Spanned html = Html.fromHtml(format); 
  6. tv1.setText(html); 

tip:

              
              
              
              
  1. Spanned html = Html.fromHtml(format); 
  2. String htmlStr = Html.fromHtml(format).toString(); 
  3.          
  4. //有样式 
  5. tv1.setText(html); 
  6. //无样式 
  7. tv2.setText(htmlStr);