1. ホーム
  2. Android

android.view.inflateexception バイナリ xml ファイル行例外の解決方法

2022-02-18 02:41:59

非常にシンプルなxmlレイアウトファイルが実行され、以下のような例外を投げることがあります。

<スパン 07-25 10:40:50.966: D/AndroidRuntime(31570): VMのシャットダウン
07-25 10:40:50.966: W/dalvikvm(31570): threadid=1: スレッドがキャッチされない例外で終了しました (group=0x42441700)
07-25 10:40:50.976: E/AndroidRuntime(31570): FATAL EXCEPTION: メイン
07-25 10:40:50.976: E/AndroidRuntime(31570): java.lang.RuntimeException: アクティビティを開始できません ComponentInfo{com.example.moveball/com. MainActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class com.example.moveball.
07-25 10:40:50.976: E/AndroidRuntime(31570): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)
07-25 10:40:50.976: E/AndroidRuntime(31570): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362)
07-25 10:40:50.976: E/AndroidRuntime(31570): at android.app.ActivityThread.access$700(ActivityThread.java:168)
07-25 10:40:50.976: E/AndroidRuntime(31570): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)

この例外は、一般に、対応するxmlのタグと属性の命名と定義に関連するものである。

非常に小さなエラーがこのような問題を引き起こすことがあります。このような小さなエラーは一般的にチェックが難しいので、コードを書くときに注意しておくと、後でチェックするときに困らないでしょう。

例えば、コントロールのEditTextがTextViewとして書かれているなど、細かい問題です

別の例として リソースファイルが見つかりません。

<スパン <スパン 補足:Androidのリソースフォルダとリソースファイルの詳細については、私の他の記事を参照してください。

一般的に res/ 以下にあるリソースファイルを見て、例えば drawable-mdpi/ ディレクトリにあるリソースファイルをすべてコピーし、drawable-mdpi/ ディレクトリにコピーし、それでもエラーが報告され、別のコピーを drawable-hdpi/ ディレクトリにコピーし、問題は解決しました。

<スパン 常に 探している場所のリソースファイルが存在しない疑いがあります。

一般的には、res/ の下に drawable/ というディレクトリを作り、drawable-mdpi/ 以下のリソースファイルを全て drawable/ にコピーします。

これらは類似の、そして他のリソースファイルのエラーに注意する必要があります。

xmlファイルがしばしば犯しがちな低レベルの間違いをまとめると。

<スパン 1. コントロール名を間違えて書いてはいけない

2. 名前は大文字と小文字を区別する必要があります、例えば EditText と editText は全く同じではありません

3. 特にネストされたレイアウトでは、タグはペアで表示されなければならない

4. 属性は一般的にアンドロイドを先行させるべきである。

5. id は特別で、@+id とする必要があり、他は @string のように直接 @ を付けることができる

6. drawable で参照される画像リソースが存在しないか、間違ったケースを持っている。

さらに、この例外は、プロパティを持つコンストラクタを追加する必要があるカスタム View クラスに関連する可能性もあります。

<スパン <スパン 例外が発生したときの main.xml のカスタム View クラスに関連するコードは次のとおりです。

<スパン <スパン activity_main.xml を参照してください。

<スパン <スパン <スパン

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"? >


<RelativeLayout 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"
    tools:context=".MainActivity" >


    <com.example.moveball.DrawView
        android:id="@+id/drawView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.example.moveball.DrawView>


</RelativeLayout></span>



<スパン <スパン Viewを継承したクラスのカスタムViewです。

<スパン <スパン <スパン <スパン

<span style="font-size:14px;">public class DrawView extends View{
	
	private float circleX = 40;
	private float circleY = 50;
	private float circleR = 15;
	
// Construct method
	public DrawView(Context context){
		super(context);
	}
	
// override ondraw method The following code is omitted... </span>



<スパン <スパン

<スパン <スパン <スパン <スパン この例外については、次のように修正します。View クラスに別のコンストラクタを追加して、修正します!

<スパン <スパン <スパン <スパン

<span style="font-size:14px;">public class DrawView extends View{
	
	private float circleX = 40;
	private float circleY = 50;
	private float circleR = 15;
	
// Construct method
	public DrawView(Context context,AttributeSet attrs){
		super(context,attrs);
	}</span>



<スパン いずれにせよ、この例外が発生する理由は、実装しなければならないコンストラクタが実装されていないことかもしれません。

<スパン <スパン 3つのコンストラクタを実装する必要があります
    public GalleryFlow(Context コンテキスト) {... <未定義
            super(context)です。
    }
    public GalleryFlow(Context context, AttributeSet attrs) {... <未定義
            super(context、attrs)を使用します。
    }
    public GalleryFlow(Context context, AttributeSet attrs, int defStyle) {... <未定義
            super(context, attrs, defStyle)を使用します。
    }

<スパン <スパン <スパン