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

时间:2015-05-30 20:46:19

标签: android layout android-design-library androiddesignsupport

我使用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)

6 个答案:

答案 0 :(得分:15)

您是否添加了设计支持库? 添加依赖项:

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

到你的build.gradle

答案 1 :(得分: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>

@color/design_textinput_error_color_lightAppCompat.Light@color/design_textinput_error_color_darkAppCompat.Dark

答案 2 :(得分:6)

确保app主题扩展AppCompat主题。

    <!-- Base application theme. -->
    <style name="AppTheme" parent="@style/Theme.AppCompat">
        <!-- Customize your theme here. -->
    </style>

答案 3 :(得分:4)

我在Android Studio生成的原始应用程序上遇到了同样的问题。

我通过首先将以下依赖项添加到build.gradle来解决它 编译'com.android.support:appcompat-v7:22.2.0'

然后我必须按照Aleksey的建议将主题库修改为 @ style / Theme.AppCompat 。 请注意,您可能需要重命名基本主题,因为appcompat库中有一个名称相同( AppTheme ),并且AS似乎在两者之间混乱......

希望这有帮助!

答案 4 :(得分: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。

答案 5 :(得分: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/

不需要更改主题风格