Android 为什么我不能将TextInputLayout(来自支持设计库)用于我们的主题.Appcompat

Android 为什么我不能将TextInputLayout(来自支持设计库)用于我们的主题.Appcompat,android,material-design,android-textinputlayout,android-support-design,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/e

我正在使用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,代码可以正常工作

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

但我的问题是,为什么我不能在棒棒糖之后使用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)
原因:java.lang.RuntimeException:未能解析索引18处的属性
位于android.content.res.TypedArray.getColor(TypedArray.java:401)
位于android.support.design.widget.collasingTextHelper.setCollapsedTextAppearance(collasingTextHelper.java:166)
位于android.support.design.widget.TextInputLayout.(TextInputLayout.java:106)
位于java.lang.reflect.Constructor.newInstance(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:288)
位于android.view.LayoutInflater.createView(LayoutInflater.java:607)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
在android.view.LayoutInflater.充气(LayoutInflater.java:504)
在android.view.LayoutInflater.inflate(LayoutInflater.java:414)
在android.view.LayoutInflater.充气(LayoutInflater.java:365)
位于com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:381)
位于android.app.Activity.setContentView(Activity.java:2144)
位于com.example.trybindinglib.MainActivity.onCreate(MainActivity.java:24)
位于android.app.Activity.performCreate(Activity.java:5933)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2407)
在android.app.ActivityThread.access$800(ActivityThread.java:149)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:211)
位于android.app.ActivityThread.main(ActivityThread.java:5321)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)

将此样式用于文本输入布局:

  <style name="MyTheme" parent="Widget.Design.TextInputLayout">

设计库中的小部件依赖于Android最新API级别的后端口功能。这包括支持真实的可绘制、颜色和属性分辨率,并使用AppCompat版本的平台属性(如
colorAccent
colorControlNormal
colorError
,等等)

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

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

如果您的应用程序是使用MinsdkVersion21设计的,并且您决定绝对不想使用AppCompat,那么有一个只使用框架功能的设计库分支

它仍然使用
support-v4
库的部分内容(这完全可以):

该项目依赖于
支持注释
和前三个
支持-v4
支持兼容
支持核心用户界面
,以及
支持核心用户界面
。所有依赖项都将通过可传递依赖项拉入,而且您可能已经在使用部分或全部这些依赖项了


在所有API级别上使用AppCompat有什么问题,因为您已经为在项目中包含AppCompat付出了以字节为单位的代价?除此之外,您不必担心v21的值,因为您将在任何地方使用相同的代码。你认为你会得到什么?(尽管AppCompat不仅仅是关于动作条或材料设计,还包括许多错误修复和功能,因为棒棒糖到目前为止都是以资源为目标的。)使用AppCompat没有问题,我很好奇为什么没有它在支持材料设计的棒棒糖上就不能工作。这看起来是最接近我问题的答案。如果我只想在一个活动中使用Material.Light.NoActionBar.TranslucentDecor for API>21?@Zigalin Translucent decor的意思是
true
true
。您可以在项目中的子主题中执行此操作。@EugenPechanec如果我使用它,它将无法编译,并出现以下错误:
error:error:style属性'attr/windowTranslucentStatus(又名com.phr.app:attr/windowTranslucentStatus)'未找到。
错误:error:style属性'attr/windowtranslucentralnavigation(又名com.phr.app:attr/windowTranslucentNavigation)“未找到。
@zhigalin缺少android:前缀