web-dev-qa-db-ja.com

TextInputLayoutを使用する場合のInflateException

Material DesignのTextInputEditTextを使用しようとしています( https://github.com/material-components/material-components-Android/blob/master/docs/components/TextInputLayout.md )and Iランタイム例外が発生しています。

これは実行ログの一部です。

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.grigori.materialtextedit, PID: 12036
              Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.grigori.materialtextedit/com.example.grigori.materialtextedit.MainActivity}: Android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class com.google.Android.material.textfield.TextInputLayout
                  at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2913)
                  at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:3048)
                  at Android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.Java:78)
                  at Android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.Java:108)
                  at Android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.Java:68)
                  at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1808)
                  at Android.os.Handler.dispatchMessage(Handler.Java:106)
                  at Android.os.Looper.loop(Looper.Java:193)
                  at Android.app.ActivityThread.main(ActivityThread.Java:6669)
                  at Java.lang.reflect.Method.invoke(Native Method)
                  at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.Java:493)
                  at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:858)
               Caused by: Android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class com.google.Android.material.textfield.TextInputLayout
               Caused by: Android.view.InflateException: Binary XML file line #9: Error inflating class com.google.Android.material.textfield.TextInputLayout
               Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.google.Android.material.textfield.TextInputLayout" on path: DexPathList

このログは、次のようなapkファイルへの多くのパスを含むDexPathListでカットしました。

Zip file "/data/app/com.example.grigori.materialtextedit-jamgTcrgG9neBKIMcqDo7Q==/base.apk"

私のxmlファイル:

<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">

<com.google.Android.material.textfield.TextInputLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <com.google.Android.material.textfield.TextInputEditText
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:hint="@string/hint_text"/>

</com.google.Android.material.textfield.TextInputLayout>

私のbuild.gradle依存関係:

    dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.Android.support:appcompat-v7:28.0.0-rc01'
implementation 'com.Android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'}     
13
grasdy

既存のプロジェクトにAndroidXを実装するときにこの問題に直面しました。

implementation 'com.google.Android.material:material:1.0.0-beta01'

レイアウトXML

<com.google.Android.material.textfield.TextInputLayout
    Android:id="@+id/userNameWrapper"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/TextLabel">

古いスタイル

<style name="TextLabel" parent="TextAppearance.AppCompat">
        <item name="Android:textColorHint">@color/hint_color</item>
        <item name="Android:textSize">@dimen/text_20sp</item>
        <item name="colorControlNormal">@color/primaryGray</item>
        <item name="colorControlActivated">@color/colorPrimary</item>
    </style>

新しいスタイル

<style name="TextLabel" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
        <item name="Android:textColorHint">@color/hint_color</item>
        <item name="Android:textSize">@dimen/text_20sp</item>
        <item name="colorControlNormal">@color/primaryGray</item>
        <item name="colorControlActivated">@color/colorPrimary</item>
    </style>
17

ご回答ありがとうございます。問題は、com.google.Android.material.textfield.TextInputLayoutを使用したことです。このコントロールを使用する場合、依存関係を追加する必要があります。

implementation 'com.google.Android.material:material:1.0.0-beta01'

私の場合、Android.support.design.widget.TextInputLayoutでxmlを書き換えます:

    <Android.support.design.widget.TextInputLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textColorHint="@color/colorPrimary"
    app:errorEnabled="true">

    <Android.support.design.widget.TextInputEditText
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:textColor="@color/colorPrimary"
        Android:textColorHint="@color/colorPrimary"
        Android:hint="Username" />

</Android.support.design.widget.TextInputLayout>

また、依存関係に追加しました:

implementation 'com.Android.support:design:27.1.1'

これで問題が解決しました。

9
grasdy

次のいずれかを継承して、@ styleフォルダーのテーマを更新します。

Theme.MaterialComponents
Theme.MaterialComponents.NoActionBar
Theme.MaterialComponents.Light
Theme.MaterialComponents.Light.NoActionBar
Theme.MaterialComponents.Light.DarkActionBar

このような:

    <style name="AppTheme.NoActionBar"    parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimaryCustom</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDarkCustom</item>
    <item name="colorAccent">@color/colorAccentCustom</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
4
Md. Yamin

アプリのGradleにこの依存関係を追加します

implementation 'com.google.Android.material:material:1.1.0-alpha09'

TextInputLayoutのstyle.xmlにこのスタイルを追加します

<style name="TextLabel" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
    <item name="Android:textColorHint">@color/colorGray600</item>
    <item name="Android:textSize">@dimen/text_20sp</item>
    <item name="colorControlNormal">@color/colorGray900</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
</style>

このようにTextInputLayoutにこれを追加します

Android:theme="@style/TextLabel"

そして、このような親テーマとして適切なテーマを使用していることを確認してください

Theme.MaterialComponents.Light

これで、InflateException問題が解決します。ただし、ベクトルドロウアブルがある場合は、以下の手順に従います

1。アプリのbuild.gradleでAndroidXベクターサポートをオプトインする必要があります。

Android {
...
defaultConfig {
    ...
    vectorDrawables.useSupportLibrary = true
} }

2。ドロアブルを宣言的に(つまり、レイアウトで)設定したい場合、appcompatは標準プラットフォームの代わりに使用すべき多くの* Compat属性を提供します:

ImageView, ImageButton:

しない:Android:srcする:app:srcCompat

CheckBox, RadioButton:

しない:Android:buttonする:app:buttonCompatTextViewappcompat:1.1.0時点):しない:Android:drawableStart Android:drawableTopなど。する:app:drawableStartCompat app:drawableTopCompat等.

これらの属性はappcompatライブラリの一部であるため、必ずapp:名前空間を使用してください。内部的に、これらのAppCompat *ビューはAppCompatResources自体を使用してベクターの読み込みを有効にします。

内部コードを使用する場合

val drawable = AppCompatResources.getDrawable(context, R.drawable.my_vector)

** 4。**データバインディングを使用している場合、カスタムバインディングアダプターを使用してこれを実現できます。

/* Copyright 2018 Google LLC.
SPDX-License-Identifier: Apache-2.0 */
@BindingAdapter("indeterminateDrawableCompat")
fun bindIndeterminateProgress(progressBar: ProgressBar, @DrawableRes id: Int) {
  val drawable = AppCompatResources.getDrawable(progressBar.context, id)
  progressBar.indeterminateDrawable = drawable
}

これで問題が解決することを願っています。

2
Jahangir Kabir

あなたは変わるべきです

build.gradle file in

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.0-beta01'

    testImplementation 'junit:junit:4.12'

    implementation 'com.google.Android.material:material:1.0.0-beta01'
}

xmlファイル入力

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".MainActivity"
    Android:focusable="false"
    Android:clickable="true">


   <LinearLayout
       Android:id="@+id/linear"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:layout_centerInParent="true"
       Android:orientation="vertical">

   <com.google.Android.material.textfield.TextInputLayout
       style="@style/TextInputLayout"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:hint="UserName"
       Android:layout_margin="15dp">

      <com.google.Android.material.textfield.TextInputEditText
          Android:layout_width="match_parent"
          Android:layout_height="wrap_content"
          Android:inputType="text"
          Android:maxLines="1" />
   </com.google.Android.material.textfield.TextInputLayout>

   <com.google.Android.material.textfield.TextInputLayout
       style="@style/TextInputLayout"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:hint="Email"
       Android:layout_margin="15dp">

      <com.google.Android.material.textfield.TextInputEditText
          Android:layout_width="match_parent"
          Android:layout_height="wrap_content"
          Android:inputType="textEmailAddress"
          Android:maxLines="1" />
   </com.google.Android.material.textfield.TextInputLayout>

      <com.google.Android.material.textfield.TextInputLayout
          style="@style/TextInputLayout"
          Android:layout_width="match_parent"
          Android:layout_height="wrap_content"
          Android:hint="Password"
          Android:layout_margin="15dp">

         <com.google.Android.material.textfield.TextInputEditText
             Android:layout_width="match_parent"
             Android:layout_height="wrap_content"
             Android:inputType="textPassword"
             Android:maxLines="1" />
      </com.google.Android.material.textfield.TextInputLayout>



   </LinearLayout>

</RelativeLayout>

MainActivity.Java

import Android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
2
deep gothi

このエラーは次の場合にスローされます
"app:passwordToggleEnabled="true" or app:passwordToggleTint="#fff"com.google.Android.material.textfield.TextInputLayout

削除することで機能します。

プログラムで設定できます。

TextInputLayout input_password_layout=(TextInputLayout)findViewById(R.id.input_password_layout);
    input_password_layout.setPasswordVisibilityToggleEnabled(true);
    input_password_layout.setPasswordVisibilityToggleDrawable(R.drawable.back);
1
Beulah Ana

依存関係に次を追加します。

implementation 'com.Android.support:design:27.0.0'

それがあなたを助けることを願っています..それを試してください..

0

同じ状況でした。理由は私の依存関係の「動物園」にありました))

17.07.2019-正しいリスト:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.Android.material:material:1.0.0'
0
Tswet

追加する必要があります

 implementation 'com.github.material-components:material-components-Android:1.0.0-rc01'

依存関係セクションでbuild.gradleアプリレベルに追加すると、次のようになります。

  dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.Android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.Android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.Android.support.test:runner:1.0.2'
    androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.github.material-components:material-components-Android:1.0.0-rc01'
    }  
0
Badran

here にリストされているこれらのすべての手順を実行した後、私はまだ同じレンダリング問題に直面していましたが、実際にデバイスでアプリを起動して何が起こるかを確認することにしました、

また、Android Studioのプレビューでは、素材コンポーネントが通常のEditTextとして表示され、複数の警告が表示されていましたが、実際のデバイスでは正しくレンダリングされました。

だから、このエラーをしばらくグーグルで探している人を救うために(私にとっては1時間無駄でした)、デバイスで試してみてください!

0
Rainmaker

com.Android.support:design:28.0.0以降を使用している場合、クラスAndroid.support.design.widget.TextInputLayoutおよびAndroid.support.design.widget.TextInputEditTextはライブラリに存在しなくなります。

APIレベル28(またはそれ以降)を使用している場合は、com.google.Android.material:materialライブラリを使用する必要があります。他の回答で説明しています。

0
Moshe Katz