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)