いくつかのコンテンツがプリロードされたテキストビューがあります。私が望むのは、コンテンツの特定の部分を英語で表示し、一部を中国語で表示することです。たとえば、英語に 3 つの段落があり、そのような各段落の後に中国語の段落が続くとします。長さが異なるため、コンテンツのスパンは使用できません。これまたはより良い代替手段の解決策を教えてください。
ありがとう :)
いくつかのコンテンツがプリロードされたテキストビューがあります。私が望むのは、コンテンツの特定の部分を英語で表示し、一部を中国語で表示することです。たとえば、英語に 3 つの段落があり、そのような各段落の後に中国語の段落が続くとします。長さが異なるため、コンテンツのスパンは使用できません。これまたはより良い代替手段の解決策を教えてください。
ありがとう :)
HTML
次のよう にフォーマットできます。
MyTypeFace.class
package my.app;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.TypefaceSpan;
public class MyTypeFace extends TypefaceSpan {
private final Typeface newType;
public MyTypeFace(String family, Typeface type) {
super(family);
newType = type;
}
@Override
public void updateDrawState(TextPaint ds) {
applyCustomTypeFace(ds, newType);
}
@Override
public void updateMeasureState(TextPaint paint) {
applyCustomTypeFace(paint, newType);
}
private static void applyCustomTypeFace(Paint paint, Typeface tf) {
int oldStyle;
Typeface old = paint.getTypeface();
if (old == null) {
oldStyle = 0;
} else {
oldStyle = old.getStyle();
}
int fake = oldStyle & ~tf.getStyle();
if ((fake & Typeface.BOLD) != 0) {
paint.setFakeBoldText(true);
}
if ((fake & Typeface.ITALIC) != 0) {
paint.setTextSkewX(-0.25f);
}
paint.setTypeface(tf);
}
}
さて、からストーリーをフェッチし、String.xml
それらに書体を適用して、それらを表示するだけです。
String text1=findViewById(R.string.text1);
String text2=findViewById(R.string.text2);
TextView textView = (TextView) findViewById(R.id.custom_fonts);
txt.setTextSize(30);
Typeface font1 = Typeface.createFromAsset(getAssets(), "english.ttf");
Typeface font2 = Typeface.createFromAsset(getAssets(), "chinese.ttf");
text1.setSpan (new MyTypeFace("", font1), 0, 4,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
text2.setSpan (new MyTypeFace("", font2), 4, 11,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
String totalText=text1+"<br>"+text2;
textView.setText(Html.fromHtml(totalText));
このサンプルからそれを理解することができます:
TextView text = new TextView(context);
text.setText(Html.fromHtml("<b>" + "some text" + "</b>" + "<br />" +
"<small>" + "some text" + "</small>" + "<br />" +
"<small>" + "some text" + "</small>"));