带有 TextInputLayout 和 AlertDialog 的 InflateException
InflateException with TextInputLayout and AlertDialog
我正在尝试在我的 DialogFragment.
中使用最新的 TextInputLayout
这是我的代码:
<android.support.design.widget.TextInputLayout
android:id="@+id/testingInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/testingEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/testText"
android:inputType="textEmailAddress" />
</android.support.design.widget.TextInputLayout>
一些背景信息:
- 启动 DialogFragment 的 activity 派生自 AppCompatActivity
- DialogFragment 派生自 Android.Support。V4.App.DialogFragment
- 我通过 Android.Support.V7.App.AlertDialog.Builder
构建 DialogFragment
- DialogFragment 通过 SupportFragmentManager
启动
- 我正在使用最新的支持设计库
这是错误(我使用的是 Xamarin,因此 MonoDroid)
[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] Android.Views.InflateException: Exception of type 'Android.Views.InflateException' was thrown.
[MonoDroid] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <IL 0x00011, 0x00078>
[MonoDroid] at Android.Runtime.JNIEnv.CallObjectMethod (intptr,intptr,Android.Runtime.JValue*) [0x00064] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d419c934/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:195
[MonoDroid] at Android.Views.LayoutInflater.Inflate (int,Android.Views.ViewGroup) [0x0006d] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d419c934/source/monodroid/src/Mono.Android/platforms/android-21/src/generated/Android.Views.LayoutInflater.cs:646
[MonoDroid] at HelloLittleApp.MyOwnDialog.OnCreateDialog (Android.OS.Bundle) [0x00027] in e:\Progetti\HelloLittleApp-Android\Dialogs\MyOwnDialog.cs:22
[MonoDroid] at Android.Support.V4.App.DialogFragment.n_OnCreateDialog_Landroid_os_Bundle_ (intptr,intptr,intptr) <IL 0x00013, 0x000f7>
[MonoDroid] at (wrapper dynamic-method) object.e260d9fd-b921-4418-a47a-496934404e0e (intptr,intptr,intptr) <IL 0x00017, 0x0004b>
[MonoDroid] --- End of managed exception stack trace ---
[MonoDroid] android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout
[MonoDroid] at android.view.LayoutInflater.createView(LayoutInflater.java:633)
[MonoDroid] at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
[MonoDroid] at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
[MonoDroid] at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
[MonoDroid] at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
[MonoDroid] at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
[MonoDroid] at md5a2b8d0e6e3890b714223a2b1204f749c.MyOwnDialog.n_onCreateDialog(Native Method)
[MonoDroid] at md5a2b8d0e6e3890b714223a2b1204f749c.MyOwnDialog.onCreateDialog(MyOwnDialog.java:29)
[MonoDroid] at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:308)
[MonoDroid] at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
[MonoDroid] at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
[MonoDroid] at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
[MonoDroid] at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
[MonoDroid] at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:458)
[MonoDroid] at android.os.Handler.handleCallback(Handler.java:739)
[MonoDroid] at android.os.Handler.dispatchMessage(Handler.java:95)
[MonoDroid] at android.os.Looper.loop(Looper.java:135)
[MonoDroid] at android.app.ActivityThread.main(ActivityThread.java:5254)
[MonoDroid] at java.lang.reflect.Method.invoke(Native Method)
[MonoDroid] at java.lang.reflect.Method.invoke(Method.java:372)
[MonoDroid] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
[MonoDroid] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
[MonoDroid] Caused by: java.lang.reflect.InvocationTargetException
[MonoDroid] at java.lang.reflect.Constructor.newInstance(Native Method)
[MonoDroid] at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
[MonoDroid] at android.view.LayoutInflater.createView(LayoutInflater.java:607)
[MonoDroid] ... 21 more
[MonoDroid] Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 18
[MonoDroid] at android.content.res.TypedArray.getColor(TypedArray.java:401)
[MonoDroid] at android.support.design.widget.CollapsingTextHelper.setCollapsedTextAppearance(CollapsingTextHelper.java:166)
[MonoDroid] at android.support.design.widget.TextInputLayout.<init>(TextInputLayout.java:106)
[MonoDroid] ... 24 more
[AndroidRuntime] Shutting down VM
如有任何提示,我们将不胜感激。
我有类似的错误:
android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout
尝试为新项目重现它,我发现问题出在应用程序主题中!尝试在 Android 清单的 application
标签中设置 android:theme
字段,如下所示:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat">
- 从 AppCompatActivity
扩展您的 activity
- 从 android.support.v4.app.Fragment.
扩展您的(对话)片段
- 使用最新版本的设计库。
不使用 EditText,而是使用 android.support.v7.widget.AppCompatEditText。例如:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:errorEnabled="true">
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="First Name"
android:inputType="textPersonName"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
此外,如果您还没有这样做:
在清单应用程序标签中设置 AppCompat 主题:
<application
...
android:theme="@style/Theme.AppCompat">
并在 styles.xml 处继承 AppCompat 作为 activity 样式等的根:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"/>
这件事也发生在我身上,我想出了一个解决方案,受到 的启发。它只需要更改 TextInputLayout 的主题:
<android.support.design.widget.TextInputLayout
android:id="@+id/testingInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Theme.AppCompat">
<EditText
android:id="@+id/testingEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/testText"
android:inputType="textEmailAddress" />
</android.support.design.widget.TextInputLayout>
如果您还没有,则需要添加 appCompat 库:
compile 'com.android.support:appcompat-v7:23.0.1'
我也有 android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout
错误。原来是我的 proguard/gradle config
引起的。我在 发布构建配置 .
中使用了 shrinkResources
指令
在我从我的发布构建配置中删除 shrinkResources
指令后,一切都重新开始工作。
希望对大家有所帮助。
根据 2018 年 Google I/O 的最新公告,以及 com.android.
到 androidx.
的折射器,所有支持库也受到了影响。
因此,您可能需要将依赖项更改为 com.google.android.material:material:<Major.Version.Number><-beta|alpha Version>
截至 2018 年 7 月 6 日,我正在使用
com.google.android.material:material:1.0.0-beta01
和上面的class<android.support.design.widget.TextInputLayout
和<android.support.design.widget.TextInputEditText
已经改为
com.google.android.material.textfield.TextInputLayout
和 com.google.android.material.textfield.TextInputEditText
查看 this link 以更好地了解所有支持库的重构内容。
祝你好运。
即使在清单中正确设置了主题,这也可能会发生,具体取决于您从中膨胀的 上下文。您可以通过在初始化 LayouInflater:
时将 ContextWrapper 与您的 AppTheme(或另一个 AppTheme)一起使用来解决此问题
LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(getApplicationContext(), R.style.AppTheme));
View view = inflater.inflate(R.layout.your_dialog_layout, null);
我遇到了这个错误,但它最终变成了一个完全不同的上下文。我没有在其他地方看到我的确切问题,所以在这里发布一个答案希望它能节省其他人的时间。在我的例子中,抛出了这个异常:
android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout
但是,这与FileProvider相机权限的实现有关。该实施涉及在 Resources/xml.
下添加一个 xml 文件
在 Resources/xml 文件夹中有任何内容都会引发异常。 FileProvider 和 TextInputLayout 都独立工作,但在同一个项目中使用时则不同。
对我有用的结果是将所有 xml 文件从 Resource/xml 移动到 Resources/layout 并使用 @layout/my_reference_here.
引用它们
这似乎是 Visual Studio/Xamarin 中的一个错误,但至少我能够继续前进。我希望这可以帮助另一个人避免浪费几天的时间来寻找它。
我正在尝试在我的 DialogFragment.
中使用最新的 TextInputLayout这是我的代码:
<android.support.design.widget.TextInputLayout
android:id="@+id/testingInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/testingEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/testText"
android:inputType="textEmailAddress" />
</android.support.design.widget.TextInputLayout>
一些背景信息:
- 启动 DialogFragment 的 activity 派生自 AppCompatActivity
- DialogFragment 派生自 Android.Support。V4.App.DialogFragment
- 我通过 Android.Support.V7.App.AlertDialog.Builder 构建 DialogFragment
- DialogFragment 通过 SupportFragmentManager 启动
- 我正在使用最新的支持设计库
这是错误(我使用的是 Xamarin,因此 MonoDroid)
[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] Android.Views.InflateException: Exception of type 'Android.Views.InflateException' was thrown.
[MonoDroid] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <IL 0x00011, 0x00078>
[MonoDroid] at Android.Runtime.JNIEnv.CallObjectMethod (intptr,intptr,Android.Runtime.JValue*) [0x00064] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d419c934/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:195
[MonoDroid] at Android.Views.LayoutInflater.Inflate (int,Android.Views.ViewGroup) [0x0006d] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d419c934/source/monodroid/src/Mono.Android/platforms/android-21/src/generated/Android.Views.LayoutInflater.cs:646
[MonoDroid] at HelloLittleApp.MyOwnDialog.OnCreateDialog (Android.OS.Bundle) [0x00027] in e:\Progetti\HelloLittleApp-Android\Dialogs\MyOwnDialog.cs:22
[MonoDroid] at Android.Support.V4.App.DialogFragment.n_OnCreateDialog_Landroid_os_Bundle_ (intptr,intptr,intptr) <IL 0x00013, 0x000f7>
[MonoDroid] at (wrapper dynamic-method) object.e260d9fd-b921-4418-a47a-496934404e0e (intptr,intptr,intptr) <IL 0x00017, 0x0004b>
[MonoDroid] --- End of managed exception stack trace ---
[MonoDroid] android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout
[MonoDroid] at android.view.LayoutInflater.createView(LayoutInflater.java:633)
[MonoDroid] at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
[MonoDroid] at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
[MonoDroid] at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
[MonoDroid] at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
[MonoDroid] at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
[MonoDroid] at md5a2b8d0e6e3890b714223a2b1204f749c.MyOwnDialog.n_onCreateDialog(Native Method)
[MonoDroid] at md5a2b8d0e6e3890b714223a2b1204f749c.MyOwnDialog.onCreateDialog(MyOwnDialog.java:29)
[MonoDroid] at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:308)
[MonoDroid] at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
[MonoDroid] at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
[MonoDroid] at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
[MonoDroid] at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
[MonoDroid] at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:458)
[MonoDroid] at android.os.Handler.handleCallback(Handler.java:739)
[MonoDroid] at android.os.Handler.dispatchMessage(Handler.java:95)
[MonoDroid] at android.os.Looper.loop(Looper.java:135)
[MonoDroid] at android.app.ActivityThread.main(ActivityThread.java:5254)
[MonoDroid] at java.lang.reflect.Method.invoke(Native Method)
[MonoDroid] at java.lang.reflect.Method.invoke(Method.java:372)
[MonoDroid] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
[MonoDroid] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
[MonoDroid] Caused by: java.lang.reflect.InvocationTargetException
[MonoDroid] at java.lang.reflect.Constructor.newInstance(Native Method)
[MonoDroid] at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
[MonoDroid] at android.view.LayoutInflater.createView(LayoutInflater.java:607)
[MonoDroid] ... 21 more
[MonoDroid] Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 18
[MonoDroid] at android.content.res.TypedArray.getColor(TypedArray.java:401)
[MonoDroid] at android.support.design.widget.CollapsingTextHelper.setCollapsedTextAppearance(CollapsingTextHelper.java:166)
[MonoDroid] at android.support.design.widget.TextInputLayout.<init>(TextInputLayout.java:106)
[MonoDroid] ... 24 more
[AndroidRuntime] Shutting down VM
如有任何提示,我们将不胜感激。
我有类似的错误:
android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout
尝试为新项目重现它,我发现问题出在应用程序主题中!尝试在 Android 清单的 application
标签中设置 android:theme
字段,如下所示:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat">
- 从 AppCompatActivity 扩展您的 activity
- 从 android.support.v4.app.Fragment. 扩展您的(对话)片段
- 使用最新版本的设计库。
不使用 EditText,而是使用 android.support.v7.widget.AppCompatEditText。例如:
<android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:errorEnabled="true"> <android.support.v7.widget.AppCompatEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="First Name" android:inputType="textPersonName" android:singleLine="true" /> </android.support.design.widget.TextInputLayout>
此外,如果您还没有这样做: 在清单应用程序标签中设置 AppCompat 主题:
<application
...
android:theme="@style/Theme.AppCompat">
并在 styles.xml 处继承 AppCompat 作为 activity 样式等的根:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"/>
这件事也发生在我身上,我想出了一个解决方案,受到
<android.support.design.widget.TextInputLayout
android:id="@+id/testingInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Theme.AppCompat">
<EditText
android:id="@+id/testingEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/testText"
android:inputType="textEmailAddress" />
</android.support.design.widget.TextInputLayout>
如果您还没有,则需要添加 appCompat 库:
compile 'com.android.support:appcompat-v7:23.0.1'
我也有 android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout
错误。原来是我的 proguard/gradle config
引起的。我在 发布构建配置 .
shrinkResources
指令
在我从我的发布构建配置中删除 shrinkResources
指令后,一切都重新开始工作。
希望对大家有所帮助。
根据 2018 年 Google I/O 的最新公告,以及 com.android.
到 androidx.
的折射器,所有支持库也受到了影响。
因此,您可能需要将依赖项更改为 com.google.android.material:material:<Major.Version.Number><-beta|alpha Version>
截至 2018 年 7 月 6 日,我正在使用
com.google.android.material:material:1.0.0-beta01
和上面的class<android.support.design.widget.TextInputLayout
和<android.support.design.widget.TextInputEditText
已经改为
com.google.android.material.textfield.TextInputLayout
和 com.google.android.material.textfield.TextInputEditText
查看 this link 以更好地了解所有支持库的重构内容。
祝你好运。
即使在清单中正确设置了主题,这也可能会发生,具体取决于您从中膨胀的 上下文。您可以通过在初始化 LayouInflater:
时将 ContextWrapper 与您的 AppTheme(或另一个 AppTheme)一起使用来解决此问题LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(getApplicationContext(), R.style.AppTheme));
View view = inflater.inflate(R.layout.your_dialog_layout, null);
我遇到了这个错误,但它最终变成了一个完全不同的上下文。我没有在其他地方看到我的确切问题,所以在这里发布一个答案希望它能节省其他人的时间。在我的例子中,抛出了这个异常:
android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout
但是,这与FileProvider相机权限的实现有关。该实施涉及在 Resources/xml.
下添加一个 xml 文件在 Resources/xml 文件夹中有任何内容都会引发异常。 FileProvider 和 TextInputLayout 都独立工作,但在同一个项目中使用时则不同。
对我有用的结果是将所有 xml 文件从 Resource/xml 移动到 Resources/layout 并使用 @layout/my_reference_here.
引用它们这似乎是 Visual Studio/Xamarin 中的一个错误,但至少我能够继续前进。我希望这可以帮助另一个人避免浪费几天的时间来寻找它。