Ответ 1
Для меня это определенно было сообщением, которое я получил, когда файл шрифта не найден. Что-то простое:
Typeface.createFromAsset(getContext().getAssets(), "fonts/MYFONT.TTF");
Когда мой шрифт был на самом деле шрифтом/MYFONT.TTF
Я пытаюсь использовать пользовательские шрифты в текстовом виде:
tv=(TextView)findViewById(res);
Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/font.ttf");
tv.setTypeface(font);
Но когда я запускаю, я получаю следующую ошибку:
W/System.err( 542): java.lang.RuntimeException: native typeface cannot be made
В чем проблема?
Для меня это определенно было сообщением, которое я получил, когда файл шрифта не найден. Что-то простое:
Typeface.createFromAsset(getContext().getAssets(), "fonts/MYFONT.TTF");
Когда мой шрифт был на самом деле шрифтом/MYFONT.TTF
Прежде всего, проверьте имя и расширение шрифта. это чувствительный к регистру и, вероятно, все кепки. например.
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/ABADDON.TTF")
Я бы предположил, что проблема с самим шрифтом. Эта ошибка будет вызвана, когда собственный код в ОС попытается загрузить шрифт. Кажется, я помню, что там есть другое сообщение, если файл отсутствует, поэтому я думаю, что он находит файл, но по какой-то причине ему это не нравится.
Я столкнулся с этой проблемой: я устанавливал шрифт внутри собственного класса макета с помощью конструктора, который передавал ссылку на "контекст" родительской активности и настраивал его следующим образом:
Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/font.ttf");
он дает мне ошибку "родной шрифт не может быть".
продолжал создание нового тестового проекта с нуля, чтобы просто отобразить "Hello World", с использованием специального шрифта, который я хочу использовать, поэтому я сделал это on onCreate() в классе активности по умолчанию:
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/font.ttf");
и на этот раз это сработало, и я подумал, что, возможно, мне стоит попробовать поставить ссылку на основное действие, а не на контекст, на мой собственный класс макета:
Typeface font = Typeface.createFromAsset(activity.getAssets(), "fonts/font.ttf");
теперь на этот раз он работал над пользовательским классом макета. надеюсь, что это тоже поможет вам, ребята.
Это может быть проблема
Typeface.createFromAsset утечка потока ресурсов: http://code.google.com/p/android/issues/detail?id=9904
public class Harshida extends View {
Bitmap gBall;
float changingY;
Typeface font;
public Harshida(Context context) {
super(context);
// TODO Auto-generated constructor stub
gBall=BitmapFactory.decodeResource(getResources(), R.drawable.greenball);
changingY=0;
font=Typeface.createFromAsset(context.getAssets(), "assets/G-Unit.TTF");
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
Paint textPaint=new Paint();
textPaint.setARGB(50,254,10,50);
textPaint.setTextAlign(Align.CENTER);
textPaint.setTextSize(50);
textPaint.setTypeface(font);
canvas.drawText("HarshidaParmar",canvas.getWidth()/2,200,textPaint);
//canvas.drawBitmap(gBall,(canvas.getWidth()/2),0,null);
canvas.drawBitmap(gBall,(canvas.getWidth()/2),changingY,null);
if(changingY < canvas.getHeight()){
changingY +=10;
}else {
changingY=0;
}
Rect middleRect= new Rect();
middleRect.set(0, 40, canvas.getWidth(),400);
//middleRect.set(0,0,0,0);
Paint ourBlue = new Paint();
ourBlue.setColor(Color.BLUE);
canvas.drawRect(middleRect, ourBlue);
//canvas.drawRect(middleRect,ourBlue);
invalidate();
}
}