2015-06-20 94 views
4

我想在我的DialogFragment使用最新的TextInputLayoutInflateException与TextInputLayout和AlertDialog

这里是我的代码:

<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
  • I buil d通过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$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 

任何提示是赞赏。

回答

10

我有类似的错误:

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

试图重现它的一个新的项目,我发现,我的问题是应用程序的主题!尝试设置android:theme场在Android清单的application标签是这样的:

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

此答案适合我。谢谢! – jwnace

+0

它也适用于我,但它也删除了我的ActionBar! – prograde

+3

糟糕,您还需要实现AppCompatActivity而不是Activity。然后它工作正常。 – prograde

3
  • 从AppCompatActivity
  • 拓展业务,从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> 
    

另外,如果你没有这样做了: 设置程序兼容性主题在你的清单应用程序标签:

<application 
    ... 
    android:theme="@style/Theme.AppCompat"> 

而在你的styles.xml为继承程序兼容性根为您的活动风格等:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"/> 
+0

不应该是'android.support.design.widget.TextInputEditText'吗? – behelit

12

这也发生在我身上,我想出了一个解决方案由AHTOH's刺激。它要求简单地改变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> 

您将需要添加的程序兼容性库如果您尚未:

compile 'com.android.support:appcompat-v7:23.0.1' 
0

我有android.view.InflateException: Binary XML file line #1: Error inflating class android.support.design.widget.TextInputLayout误差太大。原来是由我的proguard/gradle config造成的。我在我的版本构建配置中使用shrinkResources指令。

当我从我的版本构建配置中删除shrinkResources指令后,所有东西都再次开始工作。

希望它可以帮助别人。