材料设计、AppCompat和向后兼容性

3

我正在努力理解如何更好地使用Material Design的原则(我是这个领域的新手,一直在阅读文档和教程,但这个主题对我来说仍然有些模糊),我希望能得到一些帮助。到目前为止,我尝试了两个文件夹(值和值-21),每个文件夹中都有一个styles.xml文件 -

values/styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"></style>

values-v21/styles.xml:

<style name="AppTheme" parent="android:Theme.Material.NoActionBar"></style>

问题出现在我尝试使用继承自AppCompatActivity的活动(据我所知,这是为了支持早期设备的向后兼容性,例如Material Design所必需做的?我是正确的吗?更多信息在这里会很棒)。如果我这样做,应用程序将无法在API 21或更高版本的设备上运行,因为“AppTheme”必须从AppCompat继承。

为了解决这个问题,我可以创建一个从AppCompat继承的基础主题,然后使两个文件中的样式都继承自该基础主题...但那么我就不再从Material继承了....这就引出了以下问题-

Material Design只是一个指定的主题吗?如果是这样,我该怎么解决我的问题?使用AppCompatActivity到底有什么作用?或者Material Design本质上只是一组规则和原则,我应该遵循它们吗?如果是这样,我们为什么还需要Theme.Material.*呢?我将非常感谢任何人对此主题提供的额外信息。

谢谢!

1个回答

10

AppCompat的整个目的是你只需要一个主题(不需要在values-v21中单独使用),并且在所有设备上都会有相同的体验。

Theme.AppCompat已经在API 21+上扩展了android:Theme.Material - 它只是为您处理了所有版本检查。


好的,所以你的意思是,为了在所有设备上使用Material Design,我只需要定义一个扩展Theme.AppCompat的主题,然后让所有活动都扩展AppCompatActivity?根据活动内的UI元素,我应该遵循哪些指南呢? - Cookienator
这已经足够让你入门了。有一个完整的Material Design网站,其中详细介绍了Material Design UI的许多方面,其中许多部分都在库中,例如Design Support Library - ianhanniballake
还有一个问题:这是否意味着对于早于API 21的版本,AppCompat会根据版本扩展其他内容? - Cookienator
显然,然而几乎所有使材料主题成为可能的东西仍然有效。这就是整个重点。 - ianhanniballake

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