使用支持设计库中的新TextInputLayout时出现RuntimeException

14

我有一个非常简单的布局,其中使用了来自Design Support Library的新android.support.design.widget.TextInputLayout视图。

<android.support.design.widget.TextInputLayout
    android:id="@+id/til"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <EditText
        android:id="@+id/textDialog"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="First Name"/>
</android.support.design.widget.TextInputLayout>

在充气时,我遇到了异常:

Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 18
            at android.content.res.TypedArray.getColor(TypedArray.java:401)
            at android.support.design.widget.CollapsingTextHelper.setCollapsedTextAppearance(CollapsingTextHelper.java:166)
            at android.support.design.widget.TextInputLayout.<init>(TextInputLayout.java:106)
            at java.lang.reflect.Constructor.newInstance(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
            at android.view.LayoutInflater.createView(LayoutInflater.java:607)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:381)
            at android.app.Activity.setContentView(Activity.java:2144)
            at com.example.trybindinglib.MainActivity.onCreate(MainActivity.java:24)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2407)
            at android.app.ActivityThread.access$800(ActivityThread.java:149)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:211)
            at android.app.ActivityThread.main(ActivityThread.java:5321)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)

“fill_parent” 不是在5年前就被弃用了吗?这应该会产生一个警告。 - milosmns
你解决了这个问题吗?我也遇到了同样的错误。如果你已经找到了解决方法,能否请你把它发布为一个答案呢 :) - edwinj
类似问题:https://dev59.com/mlsV5IYBdhLWcg3wzBg7 - Jonas
6个回答

15

你是否已经添加了设计支持库? 添加依赖项:

compile 'com.android.support:design:22.2.0'

到你的 build.gradle 文件


9
如果您将Theme.AppCompat作为基本应用程序主题,则需要在其中定义textColorError。TextInputLayout需要在其错误状态中使用它。否则,将如上所述显示崩溃日志。
示例:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="textColorError"> @color/design_textinput_error_color_light </item>
</style>

对于 AppCompat.Light,颜色为@color/design_textinput_error_color_light;对于 AppCompat.Dark,颜色为@color/design_textinput_error_color_dark


谢谢,它可以工作了。如果你愿意,你可以设置任何其他颜色。 - CoolMind

6
确保应用程序主题扩展了AppCompat主题。
    <!-- Base application theme. -->
    <style name="AppTheme" parent="@style/Theme.AppCompat">
        <!-- Customize your theme here. -->
    </style>

我的应用扩展了 appCompat,但问题仍然存在。 - Darpan
谢谢。这个答案帮了我。 - Saminda Peramuna

4
我在使用Android Studio生成的原始应用程序中遇到了同样的问题。
我通过首先向我的build.gradle添加以下依赖项来解决它: compile 'com.android.support:appcompat-v7:22.2.0' 然后,我必须将主题基础修改为@style/Theme.AppCompat,就像Aleksey建议的那样。 请注意,在这里,您可能需要重命名您的基础主题,因为在appcompat库中有一个与之相同的名称(AppTheme),而AS似乎会混淆这两个...
希望这可以帮助您!

1
请确保您的 XML 如下所示:
<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/search"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="search" />
</android.support.design.widget.TextInputLayout>

完整示例:

http://hmkcode.com/android-textinputlayout/

无需更改主题样式。

1
如果getColor崩溃了,您可以尝试以下两个方法:
1.使用android.support.v7.widget.AppCompatEditText代替EditText。例如:
<android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:errorEnabled="true">
                <android.support.v7.widget.AppCompatEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="First Name"
                    android:inputType="textPersonName"
                    android:singleLine="true" />

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

2. 如果那样做没有帮助,可以尝试以下方法,但是当输入框被选中时,会移除提示的颜色。请添加:

            app:hintTextAppearance="@android:style/TextAppearance.Small"

将其添加到您的TextInputLayout中。

尝试了所有其他方法后,将EditText切换为AppCompatEditText解决了我的问题。谢谢! - FinHead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接