2015-06-20 40 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指令後,所有東西都再次開始工作。

希望它可以幫助別人。