在尝试使用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">
答案 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
但这并没有给我足够的信息来使用。直到我在布局编辑器中查看了其他错误。在渲染问题下,我发现了
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>
答案 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>