Android TextInputField Inflator Error

时间:2015-06-01 16:52:25

标签: android android-design-library

在尝试使用Android的新TextInputField并想要分享我的解决方案时发生了崩溃。

在android appcompat库中尝试新的TextInputField会导致我的应用程序崩溃。这是我的布局xml。

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="e-mail"
        android:inputType="textEmailAddress"
        android:singleLine="true"/>

</android.support.design.widget.TextInputLayout>

我得到的错误:

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

解: 将hintTextAppearance属性添加到TextInputLayout,因此潜在客户标记如下所示:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:hintTextAppearance="@android:style/TextAppearance.Medium">

13 个答案:

答案 0 :(得分:41)

确保您的gradle文件中包含以下依赖项:

compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:design:22.2.0'

工作示例:

<android.support.design.widget.TextInputLayout
    android:id="@+id/txtEmail_InpLyt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:id="@+id/txtEmail"
        android:hint="Email Address"
        android:singleLine="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>
</android.support.design.widget.TextInputLayout>

(不需要设置hintTextAppearance。)

<强>更新

如果您在较新版本的Android(Marshmallow / Nougat)中没有出现提示文本时遇到问题,请将库更新到版本22.2.1(请参阅TextInputLayout not showing EditText hint before user focus on it)。

compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.1'

答案 1 :(得分:22)

这也发生在我身上,我提出了一个不需要更改App主题的解决方案,只是改变了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'

答案 2 :(得分:8)

在adroidx中对我有用 我有图书馆

 implementation 'com.android.support:appcompat-v7:28.0.0'
    //design widget
    implementation 'com.android.support:design:28.0.0'

我更改

<android.support.design.widget.TextInputLayout

<com.google.android.material.textfield.TextInputLayout

答案 3 :(得分:4)

在扩展包含TextInputLayout的XML时遇到了同样的问题。 通过在我的应用程序上设置正确的样式来解决此问题。就像它在这里说的那样:android design support library

我遇到以下问题

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

我的style.xml是

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <!-- Customize your theme here. -->
    </style>
</resources>

正如this post on Design Support Library

中所述
  

请注意,由于Design库依赖于Support v4和AppCompat支持库,因此在添加Design库依赖项时将自动包含这些库。

因此无需在gradle文件中添加以下行

compile 'com.android.support:appcompat-v7:22.2.0'

我发现链接正在解释设计支持库是AppCompat的一部分,它需要AppCompat主题库才能工作。所以 我将style.xml修改为

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>
</resources>

它有效。

答案 4 :(得分:1)

使用以下内容:

View view = LayoutInflator.from(getActivity()).inflate(R.layout.your_layout_file,parent,false);

答案 5 :(得分:1)

Android Studio 3.*起,为了清楚起见,现在将其更改为

implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'

(如果添加接受 Android Studio想要建议的版本时,它会变成红色的样子)

这必须在

之内
 dependencies {}
build.gradle (Module:app)

部分,看起来像这样

dependencies {
    ...
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:design:27.1.1'
}

然后点击sync now

答案 6 :(得分:0)

你可能已经添加了它 compile 'com.android.support:appcompat-v7:22.2.0'但您需要添加compile 'com.android.support:design:22.2.0'

你可以尝试这种依赖:

compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:design:22.2.0'

在您的gradle文件中。

答案 7 :(得分:0)

我在Android Studio 3.0.1中遇到了同样的问题

您只需将以下行添加到 gradle.properties(Project Propeties)

  

android.enableAapt2 =假

答案 8 :(得分:0)

对我来说,工作从EditText更改为TextInputEditText

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/date_raffle"/>

</android.support.design.widget.TextInputLayout>

答案 9 :(得分:0)

确保LayoutInflater是通过AppCompatActivity创建的

例如

代替

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="goBtn">Go</button>
<table id="table" border=1>
  <tr>
   <th> Name </th>
   <th> contact </th>
   <th> license </th>
   <th> email </th>
   <th> state </th>
   <th> city </th>
  </tr>
</table>
    <div id="check-emails">
      
    </div>
    <button id="clickme">
    Click me
    </button>
		

使用:

inflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

答案 10 :(得分:0)

没有一个解决方案对我有用。我正在使用

compile 'com.android.support:appcompat-v7:28.0.0'
compile 'com.android.support:design:28.0.0'

尝试所有解决方案。我的应用在sdk较低的设备中完美运行。但是在更新的(大于sdk 26)设备中崩溃。但是在挠了两天之后终于得到了解决方案。

我的布局编辑器显示

的错误

The following classes could not be instantiated: - android.support.design.widget.TextInputLayout

enter image description here 但这并没有给我足够的信息来使用。直到我在布局编辑器中查看了其他错误。在渲染问题下,我发现了

Couldn't resolve resource @string/path_password_strike_through

enter image description here

在研究了此渲染问题之后,我终于找到了解决方案。您需要做的就是添加

app:passwordToggleDrawable="@string/string_name"

在TextInputLayout xml文件中。

                <android.support.design.widget.TextInputLayout
                    android:id="@+id/login_input_layout_password"
                    android:layout_width="match_parent"
                    app:passwordToggleDrawable="@drawable/ic_lock_outline_grey600_24dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="30dp"
                    android:layout_marginRight="30dp"
                    android:layout_marginTop="10dp"
                    android:backgroundTint="@color/colorAccent"
                    app:boxStrokeColor="#555"
                    android:textColorHint="@color/colorPrimary">

                    <EditText
                        android:id="@+id/login_input_password"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        />

                </android.support.design.widget.TextInputLayout>

答案 11 :(得分:0)

使用实现'com.google.android.material:material:1.1.0',您要做的就是使用XML标记,例如:

答案 12 :(得分:0)

最后我可以正常工作了...根据库本身的最新更改,从更改库

<android.support.design.widget.TextInputLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txt_input"
        android:layout_margin="@dimen/activity_horizontal_margin"
        app:layout_constraintTop_toBottomOf="@+id/edt_first_name"
        app:layout_constraintStart_toEndOf="@+id/guideline"
        app:hintEnabled="false">

        <android.support.design.widget.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Floating Hint Disabled" />

    </android.support.design.widget.TextInputLayout> 

<com.google.android.material.textfield.TextInputLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txt_input"
        android:layout_marginTop="@dimen/activity_horizontal_margin"
        app:layout_constraintTop_toBottomOf="@+id/edt_first_name"
        app:layout_constraintStart_toEndOf="@+id/guideline"
        app:hintEnabled="false">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Floating Hint Disabled" />

    </com.google.android.material.textfield.TextInputLayout>