7

我无法理解 Android 中的 AppBaseTheme 会发生什么。在styles.xml 我有以下代码

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<style name="mycolor">
    <item name="android:background">@layout/header_gradient</item>
    <item name="android:padding">5dip</item>
</style>
<style name="myParentTheme" parent="android:Theme.Light">
    <item name="android:attr/windowTitleSize">40dip</item>
    <item name="android:attr/windowTitleBackgroundStyle">@style/mycolor</item>
</style>


<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
</style>

在 AndroidManifest.xml 中,当我使用 android:theme="@style/myParentTheme" 时,标题的颜色和大小设置为我想要设置的内容。但是文本字段的样式更改为旧的常规文本框。当我使用 android:theme="@style/AppTheme" 时,UI 看起来非常“类似 Android”,但我对标题的特定设置没有任何效果。删除 parent="AppBaseTheme" 使 AppTheme 样式的行为就像 myParentTheme 样式一样。

此外,当我在 Style 标记的 name 属性中键入时按 Ctrl+Space 时,为什么看不到所有 R.attr 元素?

请帮忙。谢谢。

4

1 回答 1

17

如果您选择使用 Eclipse 新建项目向导创建活动,Eclipse 将为您定义AppTheme资源AppBaseThemeAppBaseTheme通常会有三个定义,in res/values/res/values-v11/res/values-v14/AppTheme将继承自AppBaseTheme.

目的是让您将大部分特定于应用程序的样式信息放入 中AppTheme,而不是发明您自己的主题(例如,myParentTheme)。AppBaseTheme将主要确保您从正确的操作系统提供的主题(例如,Theme.Lightvs. Theme.Holo.Lightvs. Theme.Holo.Light.DarkActionBar)继承。AppBaseTheme如果您愿意,您还可以将特定于版本的样式信息添加到适当的位置。

AndroidManifest.xml我使用时android:theme="@style/myParentTheme",标题的颜色和大小都设置为我想要设置的。但是文本字段的样式更改为旧的常规文本框。

那是因为您继承自Theme.Light,它使用原始(非全息)小部件集。

当我使用android:theme="@style/AppTheme"UI 时,它看起来非常“像 Android”,但我对标题的特定设置没有任何效果。

那是因为您决定创建myParentTheme而不是将样式定义放入AppTheme.

于 2012-12-26T16:58:02.863 回答