引用一下:
https://www.jianshu.com/p/14f4d307df1e
https://blog.csdn.net/lou_liang/article/details/79066912
项目国际化中,最大的问题,国际化文案的问题,尤其是android端和ios端文案对不齐的问题,所以,一个项目,要是一开始就不排除有国际化的需求,就最好统一文案的命名,但是ios不像android一样支持string中的标签富文本语言,为了达到文案统一的目的,只能用代码实现富文本效果。
代码:
/**
* Created by Thinkpad on 2018/6/22 16:38.
*
* @describe sb IOS不支持标签语言富文本,特写这个类代码实现富文本效果,以便于文案资源统一
*/
public class StringSpanUtilNew {
//特殊标识符代替占位符
private static final String TAG = "※※※※※";
/**
* 解析string添加ImageSpan
* */
public static SpannableStringBuilder buildDrawableSpan(Context context, @StringRes int stringId, @DrawableRes int... drawableId) {
SpannableString[] spans = new SpannableString[drawableId.length];
for(int i = 0;i<drawableId.length;i++){
spans[i] = buildDrawable(context,drawableId[i]);
}
return buildSpan(context,stringId,spans);
}
private static SpannableString buildDrawable(Context context, @DrawableRes int drawableId){
SpannableString spannableString = new SpannableString(TAG);
spannableString.setSpan(new ImageSpan(context, drawableId), 0, TAG.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
private static SpannableStringBuilder buildSpan(Context context, @StringRes int stringId, SpannableString... span) {
String[] tags = new String[span.length];
for(int i = 0 ; i<span.length;i++){
tags[i] = TAG;
}
String content = String.format(context.getString(stringId),tags);
String[] strs = content.split(TAG);
SpannableStringBuilder ssb = new SpannableStringBuilder();
for(int i = 0 ;i<span.length;i++){
ssb.append(strs[i]);
ssb.append(span[i]);
}
ssb.append(strs[span.length]);
return ssb;
}
}
调用:
tv.setText(StringSpanUtilNew.buildDrawableSpan(this,
R.string.tips,
R.mipmap.ic_launcher,
R.mipmap.ic_launcher));