android - 为什么我不能在 Theme.Appcompat 中使用 TextInputLayout(来自支持设计库)

标签 android material-design android-textinputlayout android-support-design

我正在使用如下的 TextInputLayout

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

    <EditText
        android:id="@+id/edit_text_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint_full_name"
        android:inputType="text" />
</android.support.design.widget.TextInputLayout>

如果我的应用程序使用 Theme.AppCompat,代码工作正常

下面的 Lollipop 必须使用 Theme.AppCompat 是有效的,因此我在 values\theme.xml 中使用了它。

但我的问题是,为什么我不能在 Lollipop 之后使用 Material 主题,即当我在 values-v21\theme.xml 中使用 Theme.Material 时,应用程序崩溃了.... 关于这个问题有什么线索吗?

<style name="MyTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">

下面的应用程序因 RuntimeException 而崩溃 在膨胀时我得到他的二进制膨胀错误 XML

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)

最佳答案

Design 库中的小部件依赖于从最新的 Android API 级别向后移植的功能。这包括支持真实的可绘制对象、颜色和属性解析以及使用平台属性的 AppCompat 版本(例如 colorAccentcolorControlNormalcolorError 等) .

如果您的应用已经在 API 21 以下的平台上使用 AppCompat,您可以安全地在 API 21 以上的平台上使用 AppCompat,包括 API 21。不仅如此,我鼓励你这样做。它包含从更新的 API 级别向后移植的错误修复和功能。

不要让自己头疼,不要尝试同时使用 AppCompat 和 Material 主题,除非您确切地知道自己在做什么。

如果您的应用程序是使用 minSdkVersion 21 设计的,并且您决定绝对不想使用 AppCompat,则有一个仅使用框架功能的设计库分支。

https://github.com/commonsguy/cwac-crossport

它仍然使用部分 support-v4 库(完全没问题):

This project depends upon support-annotations and three pieces of the former support-v4: support-compat, support-core-ui, and support-core-utils. All will be pulled in via transitive dependencies, and you probably already are using some or all of those dependencies anyway.

关于android - 为什么我不能在 Theme.Appcompat 中使用 TextInputLayout(来自支持设计库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45117183/

相关文章:

android - 我需要一个单独的 AndroidWear 应用程序吗

java - iOS 和 Android 上的等效加密和解密

android - 重新创建类似于 Android 12 设置的开关

jquery - CSS 在克隆元素中不起作用

android - 使用 TextInputLayout 和 TextInputEditText 时删除多余的空间/填充/边距

java - JDK 与 Android SDK (ASDK)?

android - API 可以像 Android 版 Gmail 一样放置不错的广告

android - 以编程方式设置工具栏图标颜色

java - 如何在 Android 中使用小空格作为数字分隔符?

android - 在 Android M 上将错误设置为 TextInputLayout 后更改 EditText 背景的问题