Android TextInputField 充气器错误

Android TextInputField Inflator Error

尝试为 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">

确保您的 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(棉花糖/牛轧糖)的较新版本中的问题,请将库更新到版本 22.2.1(请参阅 )。

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

我在膨胀包含 TextInputLayout 的 XML 时遇到了同样的问题。 通过在我的应用程序上设置正确的样式来解决问题。就像这里所说的:

我有以下问题

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

中所述

Note that as the Design library depends on the Support v4 and AppCompat Support Libraries, those will be included automatically when you add the Design library dependency.

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

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

我发现 link 应该解释设计支持库是 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>

它奏效了。

这也发生在我身上,我想出了一个不需要更改应用程序主题的解决方案,而只需更改 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'

使用以下内容:

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

你可能已经添加了它 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 文件中。

我在使用 Android Studio 3.0.1

时遇到了同样的问题

您只需将以下行添加到 gradle.properties(项目属性):

android.enableAapt2=false

我的工作从 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>

确保 LayoutInflater 是从 AppCompatActivity 创建的

例如。

而不是

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

使用:

inflater = LayoutInflater.from(<appCompatActivity>);

None 的解决方案对我有用。我正在使用

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

尝试了所有的解决方案。我的应用程序在 sdk 较低的设备上运行完美。但在较新的(大于 sdk 26)设备中崩溃。摸索了2天终于找到解决办法

我的布局编辑器显示

的错误

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

但它没有给我足够的信息来工作。直到我在布局编辑器上查看了其他错误。在渲染问题下我发现

Couldn't resolve resource @string/path_password_strike_through

在调查了这个渲染问题后,我终于找到了解决方案。您需要做的就是添加

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>

为了清楚起见 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

在 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

使用实现 'com.google.android.material:material:1.1.0' 你所要做的就是像这样使用你的 XML 标签:

终于我开始工作了...根据库本身的最新更改,将库从

<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>