Android Tamil шрифт между английским словом
У меня есть TextView, у которого есть огромный текст между мной есть слово tamil, и я знаю, как вставлять шрифт tamil в отдельный текст. Но мне нужно слово tamil между английским словом, пожалуйста, помогите заблаговременно
моя часть текста в текстовом виде:
В Коламе используются сезонные сообщения, такие как welcome (நல்வரவு). Волонтерство, чтобы привлечь колам в храм, иногда делается, когда преданный
Ответы
Ответ 1
Попробуйте установить этот Akshar.ttf шрифт в ваш TextView через setTypeface, он поддерживает английский и тамильский языки.
Вот результат:
![enter image description here]()
Или найдите аналогичный шрифт, который поддерживает оба языка.
ваше второе решение - использовать изображение для этой небольшой части тамильского текста, используя SpannableStringBuilder.
Код для установки настраиваемого шрифта в TextView:
Предположим, что у вас есть шрифт Akshar.ttf в папке шрифты в папке assets:
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Akshar.ttf");
TextView tv = (TextView) findViewById(R.id.CustomFontText);
tv.setTypeface(tf);
tv.setText("Seasonal messages like welcome (நல்வரவு) is used in Kolam. Volunteering to draw kolam at temple is sometimes done when a devotee's");
Ответ 2
Существует другое решение, если вы хотите поддерживать несколько шрифтов в TextView, но они не поддерживаются в одном ttf:
Используйте следующий код: (Я использую шрифт Bangla и Tamil)
TextView txt = (TextView) findViewById(R.id.custom_fonts);
txt.setTextSize(30);
Typeface font = Typeface.createFromAsset(getAssets(), "Akshar.ttf");
Typeface font2 = Typeface.createFromAsset(getAssets(), "bangla.ttf");
SpannableStringBuilder SS = new SpannableStringBuilder("আমারநல்வரவு");
SS.setSpan (new CustomTypefaceSpan("", font2), 0, 4,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
SS.setSpan (new CustomTypefaceSpan("", font), 4, 11,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
txt.setText(SS);
Результат:
![enter image description here]()
CustomTypefaceSpan Класс:
package my.app;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.TypefaceSpan;
public class CustomTypefaceSpan extends TypefaceSpan {
private final Typeface newType;
public CustomTypefaceSpan(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);
}
}
Ссылка
Ответ 3
У меня была эта проблема в Android 4.0.
Я обнаружил, что это связано с csc (код страны).
Если это Индия, то Тамил работает правильно, иначе не работает.
Я могу подтвердить это.
Ответ 4
До ICS (4.0) шрифт Tamil не был доступен в Android-системах. Даже тогда у него были ошибки, и Google исправил все это с помощью Jelly Bean (4.2).
Теперь, если вы хотите показать Тамил в своем приложении, вам нужно использовать кодировки TAB, TAM, BAMINI или TSCII.
Я написал простую библиотеку, которая динамически конвертирует вас. Все, что вам нужно написать, это простой код, как показано ниже.
// Initialise the Typeface (assumes TSCII, Bamini, Anjal, TAB or TAM font located inside assets/fonts folder)
Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/mylai.ttf");
// Initialises the TextView
TextView tv = (TextView)findViewById(R.id.textView1);
//Setting the Typeface
tv.setTypeface(tf);
//Magic happens here ;) encoding conversion
String TSCIIString = TamilUtil.convertToTamil(TamilUtil.TSCII, "வணக்கம் அன்ரொயிட்");
//Setting the new string to TextView
tv.setText(TSCIIString);
Я написал больше об этой теме в этом ответе. Также проверьте его.