查找由Android平台主题定义的所有可用样式

46

在一些 Android 样式教程中,使用了一些我找不到在 android.R.style.* 样式中的父样式元素 (http://developer.android.com/reference/android/R.style.html)。

例如,在http://android-developers.blogspot.com/2011/04/customizing-action-bar.html 的操作栏文章中,Nick 使用了以下父样式:

<style name="MyDropDownNav" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar">
...
</style>
或者
<style name="MyActionBarTabStyle" parent="android:style/Widget.Holo.Light.ActionBarView_TabView">
...
</style>

这些父级样式从哪里来?是否可以列出所有可用的父级样式?

谢谢。

4个回答

72

正如在"应用样式和主题"文章中所述:

Android平台提供了大量的样式和主题,您可以在应用程序中使用。您可以在R.style类中找到所有可用样式的参考。要使用此处列出的样式,请将样式名称中所有下划线替换为句点。例如,您可以应用Theme_NoTitleBar主题,使用"@android:style/Theme.NoTitleBar"

然而,R.style参考文档不够详细,没有充分描述这些样式,因此查看这些样式和主题的实际源代码会更好地让您了解每个样式属性提供的内容。要获得更好的Android样式和主题参考,请参阅以下源代码:

这些文件将通过示例帮助您学习。例如,在Android主题源代码中,您将找到一个声明为<style name ="Theme.Dialog">的定义。在此定义中,您将看到用于样式化Android框架使用的对话框的所有属性。


2
希望有人能指出上述文件的来源,以便我可以浏览Android的样式和主题,而无需下载整个源代码。 - moonlightdock
6
在 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/frameworks/base/core/res/res/values/themes.xml?av=f 找到了文件。 - moonlightdock

3
Parent属性是创建自己的主题或样式时可选的一个属性。 基本上,parent属性用于继承平台中已经定义的样式。 如果我们希望继承一个主题或样式并覆盖一些特性,我们可以使用parent属性。 这里有一个链接,包含所有可用平台定义的styles 还有一个提示: 如果您想继承自己创建的style,请按照以下示例进行继承。
    <style name="MyDropDownNav.Red">
        <item name="android:textColor">#FF0000</item>
    </style>

3
这是关于默认主题和样式的官方谷歌文档:Google Android Documentation。在这份文档中,您可以找到以下内容: 虽然上述问题的答案到此结束,但接下来提供的实现方式对新手很有帮助。 如何实现它们 这是我从themes.xml中得到的信息。
<style name="Theme.NoTitleBar">
    <item name="android:windowNoTitle">true</item>
</style>

现在需要在我的项目中实现它,我必须在我的Styles.xml文件中添加以下行。
<style name="AppTheme" parent="android:Theme.NoTitleBar" />

在这里,我正在创建一个名为“AppTheme”的自定义主题,它将从谷歌已经定义的主题中继承其属性。因此,我将在parent中提到它。
通过查看themes.xmlstyles.xml不仅可以获取已定义的主题和样式列表,还可以帮助新手了解如何创建主题。
由于我在parent中提到的主题已经被安卓定义了,所以我们将通过在主题名称前加上android:来使用它。
如果您想要继承您创建的主题,那么
<style name="Theme2" parent="AppTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style> 

然后只需将 style name提供给父级,这里我使用 Apptheme 作为 theme2 的父主题。


不仅名称优美,而且主题的源代码也很好看。虽然它与“Idolon”解决方案并没有太大区别,只是指向了属于谷歌的不同页面。 - user1012259

3

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