使用TextInputLayout和AlertDialog时出现InflateException

7
我将尝试在我的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的活动派生自AppCompatActivity
  • DialogFragment派生自Android.Support.V4.App.DialogFragment
  • 我通过Android.Support.V7.App.AlertDialog.Builder构建DialogFragment
  • DialogFragment通过SupportFragmentManager启动
  • 我正在使用最新的Support Design Library

以下是错误信息(我正在使用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$1.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

感激不尽,欢迎提供任何建议。

7个回答

18

我也遇到了同样的问题,后来从AHTOH那里得到启发并想出了一个解决方案。它只需要简单地更改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'

14

我遇到了类似的错误:

android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout

在尝试为新项目复制它时,我发现我的问题出在 App 主题上!尝试像这样在 Android 清单的 application 标记中设置 android:theme 字段:

<application android:theme="your_theme_name_here" ...>
 <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat">

它对我也起作用了,但它也移除了我的ActionBar! - prograde
3
抱歉,您还需要实现AppCompatActivity而不是Activity。然后它就可以正常工作了。 - prograde
1
我的最小SDK和目标SDK都是API 22。我应该使用@style/Theme.AppCompat还是@style/android:Theme.Material - Solace
我的风格是 Theme.AppCompat.Light.NoActionBar,但在“values-c21”样式文件中,我发现资源标签以 <resources>> 开始,而不是 <resources>,这会导致此错误的原因吗:Caused by android.content.res.Resources$NotFoundException: File res/drawable-v21/design_password_eye.xml from drawable resource ID - Edijae Crusar

3

最近在 Google I/O 2018 中宣布,将 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

而且,<android.support.design.widget.TextInputLayout<android.support.design.widget.TextInputEditText 类已更改为 com.google.android.material.textfield.TextInputLayoutcom.google.android.material.textfield.TextInputEditText

请查看 this 链接,以更好地了解所有支持库的改变。

祝你好运。


3
  • extend your activity from AppCompatActivity
  • extend your (dialog)fragment from android.support.v4.app.Fragment.
  • use latest version of design library.
  • Instead of using EditText, use android.support.v7.widget.AppCompatEditText. For example:

        <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作为您的活动样式等的根,以继承它。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"/>

难道不应该是android.support.design.widget.TextInputEditText吗? - behelit

3

即使在清单文件中正确设置了主题,根据你所填充的上下文,仍可能发生此情况。当初始化LayouInflater时,可以通过使用ContextWrapper与你的AppTheme(或其他主题)来解决此问题:

LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(getApplicationContext(), R.style.AppTheme));
View view = inflater.inflate(R.layout.your_dialog_layout, null);

1
我也遇到了 android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout 错误。原来是由于我的 proguard/gradle 配置 引起的。我在 发布版本的构建配置 中使用了 shrinkResources 指令。
当我从发布版本的构建配置中删除了 shrinkResources 指令后,一切都恢复正常了。
希望对某些人有所帮助。

0

我曾经遇到过这个错误,但最终发现它是完全不同的上下文。我没有在其他地方看到我的确切问题概述,所以在这里发布一个答案,希望能节省其他人的时间。在我的情况下,抛出了这个异常:

android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout

然而,这与FileProvider相机权限的实现有关。该实现涉及在Resources/xml下添加一个xml文件。

在Resources/xml文件夹中有任何内容都会引发异常。FileProvider和TextInputLayout分别工作正常,但在同一项目中使用时却不能正常工作。

对我有效的解决方法是将Resource/xml中的所有xml文件移动到Resources/layout并使用@layout/my_reference_here进行引用。

这似乎是Visual Studio/Xamarin中的一个错误,但至少我能够继续前进。我希望这可以帮助其他人避免浪费几天时间来寻找问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接