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