29

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

在 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">
4

13 回答 13

43

确保您的 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 在用户关注它之前未显示 EditText 提示)。

compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.1'
于 2015-06-18T15:41:50.310 回答
24

这也发生在我身上,我想出了一个不需要更改 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'
于 2015-10-01T15:27:16.860 回答
19

在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
于 2019-07-30T03:31:40.863 回答
4

膨胀包含TextInputLayout. 通过在我的应用程序上设置正确的样式解决了这个问题。就像这里说的:android设计支持库

我有以下问题

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>

正如在设计支持库的这篇文章中所说

请注意,由于设计库依赖于 Support v4 和 AppCompat 支持库,因此当您添加设计库依赖项时,它们将自动包含在内。

所以不需要在 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>

它奏效了。

于 2015-07-14T19:26:00.190 回答
2

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

于 2019-03-08T15:12:30.127 回答
1

最后我得到了这个工作......根据图书馆本身的最新变化,将图书馆从

<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>
于 2020-11-21T12:10:47.853 回答
1

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

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>
于 2019-01-29T21:30:30.770 回答
1

使用以下内容:

View view = LayoutInflator.from(getActivity()).inflate(R.layout.your_layout_file,parent,false);
于 2016-07-26T11:05:27.470 回答
1

确保 LayoutInflater 是从 AppCompatActivity 创建的

前任。

代替

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

利用:

inflater = LayoutInflater.from(<appCompatActivity>);
于 2018-09-02T08:16:26.407 回答
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>
于 2018-04-10T21:20:28.953 回答
0

使用实现 'com.google.android.material:material:1.1.0' 你所要做的就是像这样使用你的 XML 标签: <com.google.android.material.textfield.TextInputLayout 让它工作......在我的情况也适用于我的 <com.google.android.material.textfield.TextInputEditText。编码快乐!...

于 2020-06-24T20:20:28.850 回答
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 文件中。

于 2017-10-16T11:36:31.197 回答
0

我对 Android Studio 3.0.1 有同样的问题

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

android.enableAapt2=false

于 2018-03-13T07:03:43.717 回答