Просмотрите ошибку исключения inflate при написании кода для пользовательского шрифта в текстовом представлении в моем приложении

Я использую следующий класс для пользовательского шрифта для моего текстового представления. импортировать android.content.Context; импортировать android.graphics.Typeface; импортировать android.util.AttributeSet; импортировать android.widget.TextView;

public class MyTextView extends TextView{

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyTextView(Context context) {
        super(context);
        init();
    }

    private void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
                                               "DIEHLD_DECO.ttf");
        setTypeface(tf);
    }

}

это файл xml, содержащий мой textView

<com.example.application1.views.MyTextView 
        android:textSize="27.0sp" 
        android:textColor="@android:color/white" 
        android:gravity="top" 
        android:layout_gravity="center" 
        android:id="@+id/tname" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        />

при запуске приложения мой logcat показывает следующую ошибку.

10-31 16:09:33.249: E/AndroidRuntime(17017): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.application1/com.example.application1.MySlideShows}: android.view.InflateException: Binary XML file line #11: Error inflating class com.example.application1.views.MyTextView
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.app.ActivityThread.access$600(ActivityThread.java:149)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.os.Looper.loop(Looper.java:153)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.app.ActivityThread.main(ActivityThread.java:5086)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at java.lang.reflect.Method.invokeNative(Native Method)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at java.lang.reflect.Method.invoke(Method.java:511)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at dalvik.system.NativeStart.main(Native Method)
10-31 16:09:33.249: E/AndroidRuntime(17017): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class com.example.application1.views.MyTextView
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:258)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.app.Activity.setContentView(Activity.java:1867)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at com.example.application1.MySlideShows.onCreate(MySlideShows.java:73)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.app.Activity.performCreate(Activity.java:5020)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
10-31 16:09:33.249: E/AndroidRuntime(17017):    ... 11 more
10-31 16:09:33.249: E/AndroidRuntime(17017): Caused by: java.lang.reflect.InvocationTargetException
10-31 16:09:33.249: E/AndroidRuntime(17017):    at java.lang.reflect.Constructor.constructNative(Native Method)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
10-31 16:09:33.249: E/AndroidRuntime(17017):    ... 22 more
10-31 16:09:33.249: E/AndroidRuntime(17017): Caused by: java.lang.RuntimeException: native typeface cannot be made
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.graphics.Typeface.<init>(Typeface.java:175)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at android.graphics.Typeface.createFromAsset(Typeface.java:149)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at com.example.application1.views.MyTextView.init(MyTextView.java:26)
10-31 16:09:33.249: E/AndroidRuntime(17017):    at com.example.application1.views.MyTextView.<init>(MyTextView.java:17)
10-31 16:09:33.249: E/AndroidRuntime(17017):    ... 25 more

person mystack    schedule 31.10.2014    source источник
comment
Вы напрямую поместили свой собственный файл шрифта в assert или поместили папку шрифтов внутри assert?   -  person Haresh Chhelana    schedule 31.10.2014
comment
я поместил файл пользовательского шрифта в папку Assets   -  person mystack    schedule 31.10.2014
comment
пожалуйста, проверьте мою проблему с ответом из-за контекстной ссылки.   -  person Haresh Chhelana    schedule 31.10.2014
comment
@MD, спасибо, это сработало   -  person mystack    schedule 31.10.2014


Ответы (1)


Попробуйте этот способ, надеюсь, это поможет вам решить вашу проблему.

Вам нужна ваша текущая ссылка на контекст вместо getContext(), поэтому просто передайте ссылку на контекст методу intit из всех конструкторов.

public class MyTextView extends TextView{


    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public MyTextView(Context context) {
        super(context);
        init(context);
    }

    private void init(Context context) {
        Typeface tf = Typeface.createFromAsset(context.getAssets(),"DIEHLD_DECO.ttf");
        setTypeface(tf);
    }

}
person Haresh Chhelana    schedule 31.10.2014