Android 样式小结

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。

专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

目录

  • 一、导读
  • 二、概览
  • 三、使用
    • [3.1 创建并应用样式](#3.1 创建并应用样式)
    • [3.2 创建并应用主题](#3.2 创建并应用主题)
    • [3.3 ? & @ 符号引用](#3.3 ? & @ 符号引用)
  • [五、 推荐阅读](#五、 推荐阅读)

一、导读

我们继续总结学习Android 基础知识,温故知新。

本文讲述样式相关知识 。

二、概览

样式可以定义界面的格式和外观。样式可应用于单个 View(从布局文件中)或应用于整个 Activity 或应用(从清单文件中)。

样式是使用 name 属性中提供的值(不是 XML 文件的名称)引用的简单资源。因此,可以在一个 XML 文件中将样式资源与其他简单资源合并到一个 元素下。

样式是一个属性集合,用于指定单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性。

主题和样式有许多相似之处,但其用途不同,后面我们具体讲解一下。

三、使用

所有样式文件定义在下面这个目录:

java 复制代码
res/values/filename.xml

文件名可以任意设置。元素的 name 将用作资源 ID
该文件通常命名为 styles.xml

语法

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style
        name="style_name"                                  样式的名称
        parent="@[package:]style/style_to_inherit">        样式资源。对此样式应从中继承样式属性的样式的引用
        <item                                              定义样式的单个属性。必须是 <style> 元素的子元素
            name="[package:]style_property_name" 
            >style_value</item>
    </style>
</resources>

设计style样式的目的:在复杂多样式的控件使用和项目应用中,保持统一的格式和展现效果,同时降低维护成本。

3.1 创建并应用样式

打开项目的 res/values/styles.xml 文件,按以下步骤操作:

  1. 使用唯一标识样式的名称添加

eg:

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomText" parent="@style/Text">
        <item name="android:textSize">20sp</item>
        <item name="android:textColor">#008</item>
    </style>
</resources>

使用

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<EditText
    style="@style/CustomText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello, World!" />

要知道,我们Style样式是可以继承的,通过style标签中的parent属性指定新定义的样式所继承的样式。parent继承的是系统的一些style样式。继承是可选的,可以选择继承,也可以选择不继承。

3.2 创建并应用主题

可以像创建样式一样创建主题背景,简直一模一样,只是我们使用的位置不同而已,主题主要应用在** 标记或 **上,

使用 android:theme 属性来引用,然后应用或 Activity 中的每个视图都会应用指定主题背景中定义的样式

xml 复制代码
<manifest ... >
    <application android:theme="@style/Theme.AppCompat" ... >
    
        <activity android:theme="@style/Theme.AppCompat.Light" ... >
        
    </application>
</manifest>

Android 提供了多种在整个 Android 应用中设置属性的方法。例如,您可以直接在布局中设置属性,将样式应用到视图,将主题背景应用到布局,以及以编程方式设置属性。

所以这些设置方式是有优先级的,下面的列表将决定最终应用哪些属性。该列表按照优先级从高到低的顺序排序:

  1. 通过文本 span 将字符或段落级样式应用到 TextView 派生的类
  2. 以编程方式应用属性
  3. 将单独的属性直接应用到 View
  4. 将样式应用到 View
  5. 默认样式
  6. 将主题背景应用到 View 集合、Activity 或整个应用
  7. 应用某些特定于 View 的样式,例如为 TextView 设置 TextAppearance

3.3 ? & @ 符号引用

我们先看个例子,同样是color的引用,一个使用@,一个使用 ?,那他们到底有什么区别呢?

xml 复制代码
    <TextView
        android:textColor="@color/standard_font" />

    <TextView
        android:textColor="?attr/darkColor_ffeaeaea"/>

"@"表示引用资源,声明这是一个资源引用,格式为:@[package:]type/name

"?"表示引用主题属性,格式为:?[namespace:]type/name

问号表示:该属性是当前Theme定义的一个属性,所以系统将在当前Theme中查找其参数。

以上面的例子来解析,

  1. 从AndroidManifest.xml里面找到应用的主题为: android:theme="@style/AppTheme"
  2. 在AppTheme主题里面可以找到darkColor_ffeaeaea属性:
xml 复制代码
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
......
        <item name="darkColor_ffeaeaea">@color/colorPrimary</item>
......

如果是应用内定义的属性,[namespace:]type可以省略,

如:

android:background="?attr/colorPrimary"

可以简写为:

android:background="?colorPrimary"

如果是引用系统定义的属性,则不能省略:

android:background="?android:attr/colorPrimary"

样式

五、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

相关推荐
ufo00l4 分钟前
Kotlin在Android中有哪些重要的应用和知识点是需要学习或者重点关注的
android
AJi5 分钟前
Android音视频框架探索(二):Binder——系统服务的通信基础
android·ffmpeg·音视频开发
tjsoft1 小时前
Nginx配置伪静态,URL重写
android·运维·nginx
努力学习的小廉1 小时前
【C++11(中)】—— 我与C++的不解之缘(三十一)
android·java·c++
tangweiguo030519871 小时前
打破界限:Android XML与Jetpack Compose深度互操作指南
android·kotlin·compose
Watink Cpper2 小时前
[MySQL初阶]MySQL(8)索引机制:下
android·数据库·b树·mysql·b+树·myisam·innodedb
一起搞IT吧3 小时前
高通camx IOVA内存不足,导致10-15x持续拍照后,点击拍照键定屏无反应,过一会相机闪退
android·数码相机
前行的小黑炭5 小时前
设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
android·java·kotlin
ufo00l5 小时前
2025年了,Rxjava解决的用户痛点,是否kotlin协程也能解决,他们各有什么优缺点?
android
古鸽100865 小时前
libutils android::Thread 介绍
android