2016-06-08 163 views
1

我试图把@string/string_b里面的html <p></p>。例如,如何在html段落中添加@string?

<string name="string_a">very long text</string> 

<string name="string_b"> 
    <![CDATA[ 
     <body> 
      <p>This is string B</p> 
      <p>@string/string_a</p> 
      <p>Another string here</p> 
     </body> 
    ]]> 
</string> 

这将只显示:
这串B
@字符串/ string_a
这里的另一个字符串

但是我想表明:
这串B
非常长的文字。
另一个字符串在这里

顺便说一句,它会显示在HtmlTextView。如果可以,我只想在xml里面做。感谢你们!

+0

你管理,使其工作? – Vucko

+1

是的,但以另一种方式。通过扩展HtmlTextView。谢谢btw。 – Tuss

+0

没问题,然后自己发布答案,如果其他人有同样的问题,他们可以看到解决方案。 – Vucko

回答

1

让你strings.xml这种变化:

<string name="string_b"> 
     <![CDATA[ 
      <body> 
       <p>This is string B</p> 
       <p>%1$s</p> 
       <p>Another string here</p> 
      </body> 
     ]]> 
    </string> 

现在在你的Java代码,你可以这样做:

Resources res = getResources(); 
String string_a = res.getString(R.string.string_a); 
String string_b = String.format(res.getString(R.string.string_b), string_a); 

根据您的要求做的只是在XML中,我发现这question指的是同样的事情。所以你可以看看那里给出的答案,看看它是否适合你。

+0

是否有可能使它只在xml中? – Tuss

+0

查看问题及其答案,即我在编辑中链接的问题。 – Vucko

0

这是我的答案。希望它能帮助别人。扩展HtmlTextView为我们提供了使用string格式添加新属性的机会。然后,android:textcustom:text2可以在定制HtmlTextView内以编程方式连接。

1.如果您使用的是HtmlTextView 或TextView,请扩展它。

public class HtmlTextview extends HtmlTextView { 
    public HtmlTextview(Context context) { 
     super(context); 
    } 

    public HtmlTextview(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setupText(attrs); 
    } 

    public HtmlTextview(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     setupText(attrs); 
    } 

    private void setupText(AttributeSet attrs) { 

     String htmlString = (String) this.getText(); 
     String text2; 

     TypedArray attributeValuesArray = getContext().obtainStyledAttributes(attrs, R.styleable.concatenate, 0, 0); 
     try{ 
      text2 = attributeValuesArray.getString(R.styleable.concatenate_text2); 
     } finally { 
      attributeValuesArray.recycle(); 
     } 

     if(text2 != null && text2.length() > 0){ 
      htmlString = htmlString + text2; 
      this.setHtmlFromString(htmlString, new HtmlTextView.RemoteImageGetter()); 
     } 
    } 
} 

2. HtmlTextview属性

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <declare-styleable name="concatenate"> 
     <attr name="text2" format="string"/> 
    </declare-styleable> 

</resources> 

3.在string.xml资源

<resources> 
    <string name="app_name">HtmlTry</string> 

    <string name="string_a"> 
     <![CDATA[ 
     <body> 
      <p>very long text. Can also formatted in <font color="#f44336">Html.</font></p> 
     </body> 
     ]]> 
    </string> 

    <string name="string_b"> 
     <![CDATA[ 
     <body> 
      <p>This is string B</p> 
     </body> 
     ]]> 
    </string> 

</resources> 

4.最后应用它的XML布局内。

<com.htmltry.HtmlTextview 
    android:id="@+id/tv" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/string_b" 
    custom:text2="@string/string_a" 
/> 

最终的结果是: enter image description here