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'}
既存のプロジェクトに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>
ご回答ありがとうございます。問題は、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'
これで問題が解決しました。
次のいずれかを継承して、@ 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>
アプリの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:buttonCompat
TextView
(appcompat: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
}
これで問題が解決することを願っています。
あなたは変わるべきです
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);
}
}
このエラーは次の場合にスローされます"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);
依存関係に次を追加します。
implementation 'com.Android.support:design:27.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'
追加する必要があります
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'
}
here にリストされているこれらのすべての手順を実行した後、私はまだ同じレンダリング問題に直面していましたが、実際にデバイスでアプリを起動して何が起こるかを確認することにしました、
また、Android Studioのプレビューでは、素材コンポーネントが通常のEditTextとして表示され、複数の警告が表示されていましたが、実際のデバイスでは正しくレンダリングされました。
だから、このエラーをしばらくグーグルで探している人を救うために(私にとっては1時間無駄でした)、デバイスで試してみてください!
com.Android.support:design:28.0.0
以降を使用している場合、クラスAndroid.support.design.widget.TextInputLayout
およびAndroid.support.design.widget.TextInputEditText
はライブラリに存在しなくなります。
APIレベル28(またはそれ以降)を使用している場合は、com.google.Android.material:material
ライブラリを使用する必要があります。他の回答で説明しています。