Я имею дело с японским шрифтом. Я нашел хорошие японские шрифты с именем noto sans cjk jp
, но они слишком тяжелы для использования для каждого текстового просмотра в Android (16 МБ). Я конвертирую его из oft
в ttf
с помощью онлайн-конвертера:
Облачное преобразование
Преобразование файлов
Шрифты 2 you
Теперь он кажется более подходящим (около 8 КБ). Однако, когда я добавляю его в свое приложение, это вызывает ошибку FontFormatException
java.awt.FontFormatException: Font name not found
at sun.font.TrueTypeFont.init(TrueTypeFont.java:573)
at sun.font.TrueTypeFont.<init>(TrueTypeFont.java:191)
at sun.font.SunFontManager.createFont2D(SunFontManager.java:2461)
at java.awt.Font.<init>(Font.java:615)
at java.awt.Font.createFont0(Font.java:969)
at java.awt.Font.createFont(Font.java:877)
at android.graphics.FontFamily_Delegate.nAddFontFromAsset(FontFamily_Delegate.java:343)
at android.graphics.FontFamily.nAddFontFromAsset(FontFamily.java)
at android.graphics.FontFamily.addFontFromAsset(FontFamily.java:70)
at android.graphics.Typeface.createFromAsset(Typeface.java:185)
at com.example.user.fontchange.Typefaces.get(Typefaces.java:18)
at com.example.user.fontchange.CustomView.<init>(CustomView.java:18)
at com.example.user.fontchange.CustomView.<init>(CustomView.java:13)
Мои вопросы:
1/ Можно ли как-нибудь проверить правильность преобразованного шрифта?
2/Кто-нибудь знает, как заставить Android Studio принимать имя моего шрифта? Я также нашел ссылку Загрузка некоторого TrueType Шрифт из файла TTF на Java, но ответ не решает мою проблему.
РЕДАКТИРОВАТЬ 1:
Вот мой CustomView
для добавления нового шрифта:
public class CustomView extends TextView {
public CustomView(Context context) {
this(context, null, 0);
}
public CustomView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setTypeface(Typefaces.get(context, "fonts/NotoSansCJKjp-Medium.ttf"));
}
}
Вот мой макет xml в main_activity.xml
<com.example.user.fontchange.CustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ABC"/>
РЕДАКТИРОВАТЬ 2:
Вот класс Typefaces
public class Typefaces {
private static final String TAG = "Typefaces";
private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>();
public static Typeface get(Context c, String assetPath) {
synchronized (cache) {
if (!cache.containsKey(assetPath)) {
try {
Typeface t = Typeface.createFromAsset(c.getAssets(),
assetPath);
cache.put(assetPath, t);
Log.e(TAG, "Loaded '" + assetPath);
} catch (Exception e) {
Log.e(TAG, "Could not get typeface '" + assetPath
+ "' because " + e.getMessage());
return null;
}
}
return cache.get(assetPath);
}
}
}
Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения. Будем признательны за любую помощь, заранее спасибо!
ttf
наotf
(у меня есть 2 шрифта с одинаковым именем в моей папке шрифтов), это работает. Надеюсь увидеть ответ - person LuongTruong   schedule 08.04.2016