Android 基础知识

Android 主页 Android 概述 Android 下载安装和开发环境配置 Android Studio IDE Android 架构 Android 应用程序组件 Android Hello World 示例 Android 资源 Android 活动 Android 服务 Android 广播接收器 Android 内容提供者 Android 片段 Android Intents/Filters

Android 用户界面

Android UI 布局 Android UI 控件 Android 事件处理 Android 样式和主题 Android 自定义组件

Android 高级概念

Android 拖放 Android 通知 Android 基于位置的服务 Android 发送电子邮件 Android 发送短信 Android 拨打电话 Android 发布应用程序

Android 实用示例

Android 警报对话框 Android 动画 Android 音频捕捉 Android 音频管理器 Android 自动完成 Android 最佳实践 Android 蓝牙 Android 相机 Android 剪贴板 Android 自定义字体 Android 数据备份 Android 开发者工具 Android 模拟器 Android Facebook 集成 Android 手势 Android 谷歌地图 Android 图像效果 Android 图像切换 Android 内部存储 Android JetPlayer Android JSON 解析器 Android Linkedin 集成 Android 旋转加载器 Android 本地化 Android 登录应用 Android 媒体播放器 Android 多点触控 Android 导航 Android 网络连接 Android NFC 指南 Android PHP/MySQL Android 进度圈 Android 进度条 Android 推送通知 Android 渲染脚本 Android RSS 阅读器 Android 屏幕投射 Android SDK 管理器 Android 传感器 Android 会话管理 Android 共享首选项 Android SIP 协议 Android 拼写检查器 Android SQLite 数据库 Android 支持库 Android 测试 Android 文字转语音 Android TextureView Android Twitter 集成 Android UI 设计 Android UI 模式 Android UI 测试 Android WebView 布局 Android Wi-Fi Android Widgets Android XML 解析器

Android 其他

Android 面试问题 Android 有用的资源 Android 测验


Android - 样式和主题

style 样式资源定义了 UI 的格式和外观。 样式可以应用于单个视图(从布局文件中)或整个 Activity 或应用程序(从清单文件中)。


定义样式

样式在与指定布局的 XML 不同的 XML 资源中定义。 此 XML 文件位于项目的 res/values/ 目录下,并将 <resources> 作为样式文件必需的根节点。XML 文件的名称是任意的,但必须使用 .xml 扩展名。

您可以使用 <style> 标签为每个文件定义多个样式,但每个样式都有其唯一标识该样式的名称。Android 样式属性使用 <item> 标签设置,如下所示 −

<?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> 的值可以是关键字字符串、十六进制颜色、对其他资源类型的引用或其他值,具体取决于样式属性。

使用样式

一旦定义了样式,就可以在 XML 布局文件中使用 style 属性来使用它,如下所示 −

<?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 Style 样式相关的概念,可以查看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"
   />

您的新主题将应用于您的活动,并且文本现在是鲜红色。

主题

将颜色应用于主题属性

然后,通过将 <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 drawable 是一种特殊的图像,可以在宽度和高度上进行缩放,同时保持其视觉完整性。 Nine-patches 是指定 Android 按钮外观的最常用方法,但可以使用任何可绘制类型。

九个贴片按钮

Nine-Patch 按钮示例

创建 Nine-Patch 按钮的步骤

  • 将此位图另存为 /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 主题

您已经了解样式的概念,现在让我们尝试了解什么是主题。 主题只不过是应用于整个 Activity 或应用程序的 Android 样式,而不是单个 View。

因此,当将样式应用为主题时,Activity 或应用程序中的每个 View 都将应用它支持的每个样式属性。例如,您可以将相同的 CustomFontStyle 样式应用为 Activity 的主题,然后该 Activity 内的所有文本都将具有绿色等宽字体。

要为应用程序的所有活动设置主题,请打开 AndroidManifest.xml 文件并编辑 <application> 标签以包含带有样式名称的 android:theme 属性。 例如 −

<application android:theme="@style/CustomFontStyle">

但是,如果您希望将主题应用于应用程序中的一个 Activity,则只需将 android:theme 属性添加到 a2 标签。 例如 −

<activity android:theme="@style/CustomFontStyle">

Android定义了许多默认主题,您可以直接使用或使用 parent 属性继承它们,如下所示 −

<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 类中找到所有可用样式的参考。 要使用此处列出的样式,请将样式名称中的所有下划线替换为句点。 例如,您可以将 Theme_NoTitleBar 主题与 "@android:style/Theme.NoTitleBar" 一起应用。 你可以看到下面的 Android 样式和主题的源代码 −

  • Android 样式 (https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml)

  • Android 主题 (https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml)