【问题标题】:android.view.InflateException: Binary XML file line #69: Error inflating class, when using a custom font for edittextandroid.view.InflateException: Binary XML file line #69: Error inflating class, when using a custom font for edittext
【发布时间】:2016-10-16 23:52:35
【问题描述】:

请尝试使用我所做的自定义字体,但我的应用程序在假设启动 LoginActivity 时崩溃。已搜索但找不到问题的解决方案。这是错误信息:

E/AndroidRuntime: FATAL EXCEPTION: main
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.squaresoft.spotr/com.squaresoft.spotr.LoginActivity}: android.view.InflateException: Binary XML file line #69: Error inflating class com.squaresoft.customfonts.MyEditText
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
                      at android.app.ActivityThread.access$700(ActivityThread.java:140)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
                      at android.os.Handler.dispatchMessage(Handler.java:99)
                      at android.os.Looper.loop(Looper.java:137)
                      at android.app.ActivityThread.main(ActivityThread.java:4946)
                      at java.lang.reflect.Method.invokeNative(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:511)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
                      at dalvik.system.NativeStart.main(Native Method)
                   Caused by: android.view.InflateException: Binary XML file line #69: Error inflating class com.squaresoft.customfonts.MyEditText
                      at android.view.LayoutInflater.createView(LayoutInflater.java:613)
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
                      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:308)
                      at android.app.Activity.setContentView(Activity.java:1924)
                      at com.squaresoft.spotr.LoginActivity.onCreate(LoginActivity.java:34)
                      at android.app.Activity.performCreate(Activity.java:5206)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
                      at android.app.ActivityThread.access$700(ActivityThread.java:140) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:137) 
                      at android.app.ActivityThread.main(ActivityThread.java:4946) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:511) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803) 
                      at dalvik.system.NativeStart.main(Native Method) 
                   Caused by: java.lang.reflect.InvocationTargetException
                      at java.lang.reflect.Constructor.constructNative(Native Method)
                      at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
                      at android.view.LayoutInflater.createView(LayoutInflater.java:587)
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
                      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:308) 
                      at android.app.Activity.setContentView(Activity.java:1924) 
                      at com.squaresoft.spotr.LoginActivity.onCreate(LoginActivity.java:34) 
                      at android.app.Activity.performCreate(Activity.java:5206) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
                      at android.app.ActivityThread.access$700(ActivityThread.java:140) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:137) 
                      at android.app.ActivityThread.main(ActivityThread.java:4946) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:511) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803) 
                      at dalvik.system.NativeStart.main(Native Method) 
                   Caused by: java.lang.RuntimeException: native typeface cannot be made
                      at android.graphics.Typeface.<init>(Typeface.java:265)
                      at android.graphics.Typeface.createFromAsset(Typeface.java:239)
                      at com.squaresoft.customfonts.MyEditText.init(MyEditText.java:30)
                      at com.squaresoft.customfonts.MyEditText.<init>(MyEditText.java:20)
                      at java.lang.reflect.Constructor.constructNative(Native Method) 
                      at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
                      at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
                      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:308) 
                      at android.app.Activity.setContentView(Activity.java:1924) 
                      at com.squaresoft.spotr.LoginActivity.onCreate(LoginActivity.java:34) 
                      at android.app.Activity.performCreate(Activity.java:5206) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
                      at android.app.ActivityThread.access$700(ActivityThread.java:140) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:137) 
                      at android.app.ActivityThread.main(ActivityThread.java:4946) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:511) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803) 
                      at dalvik.system.NativeStart.main(Native Method) 

对于我的 LoginActivity:

package com.squaresoft.spotr;

import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;



public class LoginActivity extends Activity
{
EditText email, pass;
Button log;
TextView signin, fb, account;
TextView signup;
SQLiteDBHelper dbhelper;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);


    //Referencing UserEmail, Password EditText and TextView for SignUp 

    fb = (TextView)findViewById(R.id.fb);
    account = (TextView)findViewById(R.id.account);
    email = (EditText) findViewById(R.id.emailT);
    pass = (EditText) findViewById(R.id.passwordT);
    log = (Button) findViewById(R.id.buttonsignin);
    signup = (TextView)findViewById(R.id.signup);
    signin = (TextView)findViewById(R.id.signin);

    //Opening SQLite Pipeline
    dbhelper = new SQLiteDBHelper(this);
    dbhelper = dbhelper.open();

    log.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String email1 = email.getText().toString();
            String pass1 = pass.getText().toString();
            // fetch the Password form database for respective user name
            String storedPassword = dbhelper.getSinlgeEntry(email1);

            // check if the Stored password matches with  Password 

            if (pass1.equals(storedPassword)) {
                Toast.makeText(LoginActivity.this, "Congrats: Login Successfull", Toast.LENGTH_LONG).show();
                Intent intent = new  Intent(LoginActivity.this,Home.class);
                startActivity(intent);

            }
            else {
                Toast.makeText(LoginActivity.this, "User Name or  Password does not match", Toast.LENGTH_LONG).show();
                email.setText("");
                pass.setText("");
            }
        }


    });



    // Intent For Opening RegisterAccountActivity
    signup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(LoginActivity.this, SignUp.class);
            startActivity(intent);
        }
    });



}
  @Override
  protected void onDestroy() {
    super.onDestroy();
    // Close The Database
    dbhelper.close();
}
}

用于登录的 xml...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>


<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="260dp">



    <ImageView
        android:layout_width="match_parent"
        android:layout_height="260dp"
        android:background="@drawable/banner"/>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center|bottom"

        android:background="#80000000">



        <TextView
            android:id="@+id/signin"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="Sign in"
            android:textColor="#087272"
            android:textSize="16dp"
            android:layout_gravity="center"
            android:gravity="center"
            android:padding="16dp"/>



        <TextView
            android:id="@+id/signup"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="Sign up"
            android:textColor="#fff"
            android:textSize="16dp"
            android:padding="16dp"/>


     </LinearLayout>






  </FrameLayout>


 <com.squaresoft.customfonts.MyEditText
    android:id="@+id/emailT"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="E-mail"
    android:inputType="text"
    android:textColor="#000"
    android:background="#f0f0f4"
    android:padding="12dp"
    android:layout_marginTop="20dp"
    android:layout_marginBottom="10dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:drawableLeft="@drawable/ic_shapes_2"
    android:drawablePadding="16dp"

    />


  <com.squaresoft.customfonts.MyEditText
    android:id="@+id/passwordT"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Password"
    android:inputType="textPassword"
    android:background="#f0f0f4"
    android:textColor="#000"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="20dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:padding="12dp"
    android:drawablePadding="16dp"
    android:drawableLeft="@drawable/ic_tool_6"
    />


  <com.squaresoft.customfonts.MyRegulerText
    android:id="@+id/buttonsignin"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/rounded1"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="70dp"
    android:layout_marginRight="70dp"
    android:textAlignment="center"
    android:padding="14dp"
    android:text="Sign In"
    android:textSize="16dp"
    android:textColor="#fff"
    />


  <com.squaresoft.customfonts.MyRegulerText
    android:id="@+id/fb"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/rounded"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="20dp"
    android:layout_marginLeft="70dp"
    android:layout_marginRight="70dp"
    android:textAlignment="center"
    android:padding="14dp"
    android:text="Facebook Connect"
    android:textColor="#fff"
    android:textSize="16dp"
    />


  <com.squaresoft.customfonts.MyTextView
    android:id="@+id/account"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Don't have an account?"
    android:textSize="16dp"
    android:layout_gravity="center" />







</LinearLayout>

MyEditText 的最终 java 类

package com.squaresoft.customfonts;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.EditText;


public class MyEditText extends EditText {

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

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

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

private void init() {
    if (!isInEditMode()) {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Lato-Light.ttf");
        setTypeface(tf);
    }
    }

  }

感谢您的帮助。

【问题讨论】:

    标签: android xml fonts custom-controls android-inflate


    【解决方案1】:

    在 LoginActivity:line 34 似乎发生了错误,但第 34 行是代码副本中的空间。

    【讨论】:

    • 我不明白,“但是第 34 行是代码副本中的空格。”
    【解决方案2】:

    检查您的 MyEditText 类:

    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803) 在 dalvik.system.NativeStart.main(Native Method) 原因: java.lang.RuntimeException:本机字体不能在 android.graphics.Typeface.(Typeface.java:265)

        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Lato-Light.ttf");
    

    您不能在此处使用原生字体。使用另一种方法。

    【讨论】:

    • 所以我们要使用原生字体
    • 尝试将字体名称更改为小写,将 - 替换为 _: fonts/Lato-Light.ttf -> fonts/lato_light.ttf
    猜你喜欢
    • 2018-10-29
    • 1970-01-01
    • 2016-11-03
    • 2020-06-27
    • 1970-01-01
    • 2015-08-21
    • 2012-02-09
    • 2012-03-04
    • 2013-06-25
    相关资源
    最近更新 更多