Android(安卓)样式与主题
定义样式
样式在与指定布局的 XML 分离的 XML 资源中定义。此 XML 文件位于项目的 res/values/ 目录下,并将 <resources> 作为根节点,这对于样式文件是必需的。XML 文件的名称是任意的,但必须使用 .XML 扩展名。
您可以使用 <style>
标记为每个文件定义多个样式,但每个样式都有其唯一标识样式的名称。使用 <item>
标签设置 Android 风格属性,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomFontStyle">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:capitalize">characters</item>
<item name="android:typeface">monospace</item>
<item name="android:textSize">12pt</item>
<item name="android:textColor">#00FF00</item>/>
</style>
</resources>
<item>
的值可以是关键字字符串、十六进制颜色、对另一资源类型的引用,或者取决于样式属性的其他值。
使用样式
定义样式后,可以使用 style
属性在 XML 布局文件中使用它,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text_id"
style="@style/CustomFontStyle"
android:text="@string/hello_world" />
</LinearLayout>
要了解与 Android 样式相关的概念,可以查看 样式 Demo 实例。
Style 继承
Android 支持样式继承的方式与网页设计中的级联样式表非常相似。您可以使用它从现有样式继承特性,然后仅定义要更改或添加的特性。
要实现自定义主题,请创建或编辑 MyAndroidApp/res/values/themes.xml 并添加以下内容:
<resources>
...
<style name="MyCustomTheme" parent="android:style/Theme">
<item name="android:textColorPrimary">#ffff0000</item>
</style>
...
</resources>
在你的 AndroidManifest.xml 中将主题应用于您想要设置样式的活动:
<activity
android:name="com.myapp.MyActivity"
...
android:theme="@style/MyCustomTheme"
/>
您的新主题将应用于您的 Activity 活动,文本现在为亮红色。
将颜色应用于主题属性
然后,通过向自定义主题添加 <item>
元素,可以将颜色资源应用于某些主题属性,例如窗口背景和主文本颜色。这些属性在 styles.xml 文件中定义。例如,要将自定义颜色应用于窗口背景,请将以下两个 <item>
元素添加到 MyAndroidApp/res/values/styles.xml 文件中定义的自定义主题。
<resources>
...
<style name="MyCustomTheme" ...>
<item name="android:windowBackground">@color/my_custom_color</item>
<item name="android:colorBackgroundCacheHint">@color/my_custom_color</item>
</style>
...
</resources>
使用自定义 Nine-Patch(九点图)按钮
Nine-Patch 绘制图像是一种特殊的图像,可以在宽度和高度上缩放,同时保持其视觉完整性。Nine-Patch 是指定 Android 按钮外观的最常见方式,尽管可以使用任何可绘制类型。
定义九点图按钮的步骤
- 保存图片至 /res/drawable/my_nine_patch.9.png
- 定义一个新样式
- 将新按钮样式应用于自定义主题的 buttonStyle 属性
<resources>
...
<style name="MyCustomButton" parent="android:Widget.Button">
<item name="android:background">@drawable/my_nine_patch</item>
</style>
...
</resources>
应用主题
<resources>
...
<style name="MyCustomTheme" parent=...>
...
<item name="android:buttonStyle">@style/MyCustomButton</item>
</style>
...
</resources>
Android 主题
希望你理解了 样式(Style)的概念,所以现在让我们试着理解什么是 主题(Theme)。主题只是应用于整个活动或应用程序的 Android 样式,而不是单个视图。
因此,当样式作为主题应用时,Activity 活动或应用程序中的每个 视图 都将应用它支持的每个样式属性。例如,您可以将相同的 CustomFontStyle
样式应用于 Activity 活动的主题,然后该活动中的所有文本都将使用绿色的单空格字体。
要为应用程序的所有活动设置主题,请打开 AndroidManifest.xml 文件,并编辑 <application>
标签以包含带有样式名称的 android:theme
属性。
例如 − 但是,如果您只想将主题应用于应用程序中的一个 Activity,那么只需将 android:theme
属性添加到 <Activity> 标记中。
例如 − Android 定义了许多默认主题,您可以直接使用或使用 父 属性继承它们,如下所示:
<style name="CustomTheme" parent="android:Theme.Light">
...
</style>
要了解与 Android 主题相关的概念,可以查看 主题演示实例。
设置调色板的样式
布局设计可以基于它们的颜色来实现,例如,以下设计是基于颜色(蓝色)来设计的
上面的布局是基于 style.xml 文件设计的,它放置在 res/values/ 中
<resource>
<style name="AppTheme" parent="android:Theme.Material">
<item name ="android:color/primary">@color/primary</item>
<item name ="android:color/primaryDark">@color/primary_dark</item>
<item name ="android:colorAccent/primary">@color/accent</item>
</style>
<resource>
默认样式 & 主题
Android 平台提供了大量的样式和主题,您可以在应用程序中使用这些样式和主题。您可以在 R.style
类中找到所有可用样式的引用。要使用此处列出的样式,请将样式名称中的所有下划线替换为句点。例如,您可以使用 "@android:style/Theme.NoTitleBar" 应用 Theme_NoTitleBar 主题。
您可以看到以下 Android 风格和主题的源代码: