【问题标题】:RuntimeException while using new TextInputLayout from support design library使用支持设计库中的新 TextInputLayout 时出现 RuntimeException
【发布时间】:2015-08-13 14:21:16
【问题描述】:

我的布局非常简单,我使用来自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 年前被弃用了吗?那应该会再产生一个警告
  • 您找到解决此问题的方法了吗?我得到同样的错误。如果您发现问题,请您将其发布为答案:)

标签: android layout android-design-library androiddesignsupport


【解决方案1】:

如果您使用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_lightAppCompat.Dark@color/design_textinput_error_color_dark

【讨论】:

  • 谢谢,它有效。如果你愿意,你可以设置任何你喜欢的颜色。
【解决方案2】:

确保您的 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/

无需更改主题样式

【讨论】:

    【解决方案3】:

    getColor 崩溃,你可以尝试两件事:

    1.不要使用EditText,而是使用android.support.v7.widget.AppCompatEditText。例如:

    <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 解决了我的问题。谢谢!!
    【解决方案4】:

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

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

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

    希望这会有所帮助!

    【讨论】:

      【解决方案5】:

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

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

      到你的 build.gradle

      【讨论】:

        【解决方案6】:

        确保应用主题扩展了 AppCompat 主题。

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

        【讨论】:

        • 我的扩展了 appCompat,但问题仍然存在
        • 谢谢。这个答案对我有帮助。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 1970-01-01
        • 2016-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多