《移动互联网技术》第六章 资源管理: 掌握定制控件样式、界面主题、可绘制资源程序的编写方法

news2024/11/22 23:46:48

在这里插入图片描述

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁
🦄 个人主页——libin9iOak的博客🎐
🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

文章目录

  • 《移动互联网技术》课程简介
  • 第六章 资源管理
    • 本章小结:
      • **1**、本单元学习目的
      • **2**、本单元学习要求
      • **3**、本单元学习方法
      • **4**、本单元重点难点分析
    • **重点**
      • **(1)** **常用资源访问**
      • **(2)** **样式和主题**
    • **难点**
      • **(1)** **可绘制资源**
      • **(2)** **原生资源**
    • 本章习题:
  • 原创声明

《移动互联网技术》课程简介

《移动互联网技术》课程是软件工程、电子信息等专业的专业课,主要介绍移动互联网系统及应用开发技术。课程内容主要包括移动互联网概述、无线网络技术、无线定位技术、Android应用开发和移动应用项目实践等五个部分。移动互联网概述主要介绍移动互联网的概况和发展,以及移动计算的特点。无线网络技术部分主要介绍移动通信网络(包括2G/3G/4G/5G技术)、无线传感器网络、Ad hoc网络、各种移动通信协议,以及移动IP技术。无线定位技术部分主要介绍无线定位的基本原理、定位方法、定位业务、数据采集等相关技术。Android应用开发部分主要介绍移动应用的开发环境、应用开发框架和各种功能组件以及常用的开发工具。移动应用项目实践部分主要介绍移动应用开发过程、移动应用客户端开发、以及应用开发实例。
课程的教学培养目标如下:
1.培养学生综合运用多门课程知识以解决工程领域问题的能力,能够理解各种移动通信方法,完成移动定位算法的设计。
2.培养学生移动应用编程能力,能够编写Andorid应用的主要功能模块,并掌握移动应用的开发流程。
3. 培养工程实践能力和创新能力。
 通过本课程的学习应达到以下目的:
1.掌握移动互联网的基本概念和原理;
2.掌握移动应用系统的设计原则;
3.掌握Android应用软件的基本编程方法;
4.能正确使用常用的移动应用开发工具和测试工具。

第六章 资源管理

本章小结:

1、本单元学习目的

通过了解应用程序常用的各种资源,掌握资源的访问方法,以及两种设置界面外观的方式:样式(Style)和主题(Theme);对于可绘制资源,重点掌握三种Drawable资源:state list drawable、shape drawable和layer list drawable;理解原生资源的管理方式。

2、本单元学习要求

(1) 掌握各种资源的基本访问用法;

(2) 掌握定制控件样式、界面主题、可绘制资源程序的编写方法;

(3) 掌握原生资源打包方法。

3、本单元学习方法

结合教材以及Android Studio开发软件,对各种资源访问方法进行编程练习,并在模拟器中观察运行情况,分析资源的管理方式。

4、本单元重点难点分析

重点

(1) 常用资源访问

在Android系统中,把图片、布局、字符串、颜色、尺寸、数组、样式等等与代码不相关的内容都看作资源。在Android Studio工程项目的目录结构中,java目录下是应用的程序代码,它下面的res目录包含了工程项目用到的各种资源。从工程的角度来看,把资源从代码中分离出来,使得程序更容易维护,同时也可以实现界面和程序逻辑的分离,可以让界面设计师与程序员并行工作,提高了开发的效率。

把所有的资源都分类存放在一起以后,还要在程序中把资源提取出来。系统提供了三种访问资源的方法。第一种,通过Android自动生成的R文件来访问资源;第二种,采用Android提供的资源类来访问;第三种,很多资源文件都是xml文件格式,可以在这些资源文件之间相互引用。

  1. 用R文件访问资源

再回顾一下前面介绍的R文件。R文件是自动生成的一个类。在它的内部,把每一个资源都赋予了一个唯一的数字编码。在访问这些资源的时候,可以直接通过R类来引用资源。R后面的第一级符号表示资源的类型。在程序中,经常将R类引用的资源传给findViewById函数,以此来获取控件对象。

  1. 用Resource类访问资源

采用代码来访问资源,主要用到了Resource类。它可以直接把R文件的资源编码转换为对应的资源。以下代码转换了String资源、图像资源和字符串数组。

Resource res = getResources();

String addQuiz = res.getText(R.string.add_quiz);

Drawable blankfilling = res.getDrawable(R.drawable.ic_blankfilling);

String[] quizzes = res.getStringArray(R.array.quizzes);

  1. 在xml文件中访问资源

很多资源都是采用xml文件的形式。比如字符串资源存放在values目录下的strings文件中。下面给出了三个字符串资源的定义,每一个资源符号都代表了一个字符串。现在,在布局文件activity_quiz.xml中要使用字符串资源。比如:要在按钮上显示“下一题”这个字符串,可以通过“@string/next_button”来获取。

\res\values\strings.xml

<resources>

  <string name="app_name">Tutorial</string>

  <string name="add_quiz">新建习题</string>

  <string name="**next_button**">下一题</string>

</resources>

\res\layout\activity_quiz.xml

<LinearLayout>

  <Button

​    android:layout_width="wrap_content"

​    android:layout_height="wrap_content"

​    android:text="**@string/next_button**" />

  … …

</LinearLayout>

接下来介绍一些常用的资源,包括字符串、颜色、尺寸和数组。在后续的内容中会涉及更复杂的资源使用。程序中如果要使用字符串,通过标签来定义字符串。每一个字符串用一个标签来表示。

\res\values\strings.xml

CourseQuiz

知识点

课堂练习

作业

补充材料

​ … …

颜色存放在colors文件(colors.xml)中,与字符串类似,也是用标签来包装。标签通常采用8位16进制的编码方式来表示:#RRGGBB,前两位表示红色、中间两位表示绿色、后面两位表示蓝色。三种颜色的混合就是最终的颜色效果。颜色的数值化表示和颜色本身的对应关系,可以在网上查看它们之间的对应表来设置希望显示的颜色。

\res\values\colors.xml

<?xml version="1.0" encoding="utf-8"?>

#3F51B5

#303F9F

#FF4081

#12000000

#ff847d7b

#FF4801

在程序中,特别是在界面设计中经常要用到一些跟尺寸有关的数字。比如,文本框的边距、两个列表项之间的间距等等。尺寸的资源都定义在dimens文件中。在dimen标签中,可以设置各种尺寸的大小。这里的dp是密度无关的意思。

\res\values\dimens.xml

16dp

16dp

现在移动设备的分辨率各不相同。如果采用固定尺寸来设置界面控件的大小,那么程序就很难适应多种分辨率的设备。比如一个有300个像素宽度的按钮,在低分辨率的手机上它可能占据整个屏幕;但是,在高分辨率的手机上可能只占据屏幕的一半。

px是指屏幕中可以显示的最小元素单元,它表示像素(pixel)。Pt(point,磅数)是一个标准的长度单位,长度为1/72英寸,通常用于印刷业。dp(device independent pixels,或缩写为dip)表示设备独立像素。sp(scaled pixels,可伸缩像素)主要用于字体显示,根据 Google 的建议,TextView 的文本字号最好使用 sp 做单位。

程序中用到的数组Android也推荐存入资源文件。数组同样定义在strings文件中。现在把定义多个课程名称的数组“course_group”存放在标签下,每一项数据都用标签来描述。

\res\values\strings.xml

​ 离散数学

​ 移动计算及应用开发技术

​ 大型机应用基础

​ 企业移动开发实践

(2) 样式和主题

样式是一套能够应用于视图组件的属性。Android上的样式包括两个方面:Style(风格)和Theme(主题)。Style针对窗体元素,主要用来改变指定控件或者Layout的样式,它存放在styles文件中。比如:添加一个定制的按钮样式,设置不同的文本颜色和背景颜色。

\res\values\styles.xml

定义好样式以后,就可以在布局文件的按钮定义中使用新的样式。在按钮的属性里设置style属性值为定制按钮样式。按钮就会按照定义的文本和背景颜色来显示。

<Button

​ xmlns:Android=http://schemas.Android.com/apk/res/Android

​ xmlns:tools=http://schemas.Android.com/tools

style=“@style/CustomButton”

​ Android:id=“@+id/my_button”

​ android:layout_width=“match_parent”

​ android:layout_height=“wrap_content”

​ tools:text=“定制的按钮“

/>

一个样式能继承并覆盖其他样式的属性。设定定制按钮样式:把它的背景设为深蓝色。接着,再定义一个粗体按钮样式,把它的文本设为粗体。新的样式实际上包含了两个样式,一个是背景样式,一个是文本样式,背景样式是从CustomButton上继承下来的。

<style name="CustomButton"><item name="Android:background">@color/dark_blue</item>

</style>

<style name="CustomButton.Bold"><item name="Android:textStyle">bold</item>

</style>

新的样式也可以采用另外一种继承方式:在style标签中加入parent属性来明确指出继承的父类。

<style name="BoldCustomButton" parent="@style/CustomButton"><item name="Android:textStyle">bold</item>

</style>

不同于样式(Style),主题(Theme)针对窗体,它改变整个窗口界面的样式。也可以把主题看作是样式的加强版。通过设置主题属性,不再需要为不同的组件分别设置相同的样式。可以把这些相同的样式提取出来,一次性地完成设定。主题还能引用其他样式,并且能够应用于整个应用界面。

在配置文件AndroidManifest.xml中设置主题样式,下面列出了Android Studio默认设定的主题样式。

<manifest

… …

<application

​ Android:icon=“@mipmap/ic_launcher”

​ Android:label=“@string/app_name”

​ Android:supportsRtl=“true”

Android:theme=“@style/AppTheme”>

打开styles.xml文件看到样式的定义。主题样式继承了具有深色工具栏的浅色主题。接着通过标签可以添加自定义的属性值,或是覆盖父主题的某些属性值。在这里增加了三个颜色属性。colorPrimary属性主要用来设置工具栏背景色。colorPrimaryDark用于屏幕顶部的状态栏。colorAccent一般和colorPrimary形成反差效果,主要用于给EditText这样的组件着色。

\res\values\styles.xml

在这里插入图片描述

要查看AppTheme主题定义,按下Ctrl键,点击@style/AppTheme,Android Studio就会自动打开res/values/styles.xml文件。

难点

(1) 可绘制资源

Drawable代表了一大类资源。比如:图形、位图图像就是可绘制的资源。下面主要介绍三种形状绘制资源:state list drawable、 shape drawable和layer list drawable。这三个drawable都定义在XML文件中,可以归为一类,统称为XML drawable。

  1. shape drawable

采用XML形式的drawable资源,不需要考虑资源对象的像素密度,它可以适应各种分辨率的设备。首先通过shape drawable来定制一个圆形按钮。在 drawable目录下,创建一个表示圆形按钮样式的xml文件:round_button_normal.xml。再通过shape标签来定制按钮的样式。shape设置为圆形,当然也可以设置其他形状,比如线条、梯形等。另外,还设置了按钮的填充颜色。

res/drawable/round_button_normal.xml

<shape xmlns:android=“http://schemas.android.com/apk/res/android”

android:shape=“oval”>

<solid android:color=“@color/colorAccent” />

为了增强用户的使用体验,接下来修改按钮背景,让按钮在没有压下和压下的时候,分别呈现不同的显示效果。为此,需要再创建一个显示压下效果的样式文件round_button_pressed.xml。在round_button_pressed.xml中,把按钮的填充颜色改为红色,也就是当用户按下按钮的时候,按钮显示为红色。

res/drawable/round_button_pressed.xml

<shape xmlns:Android=“http://schemas.Android.com/apk/res/Android”

Android:shape=“oval”>

  1. StateListDrawable

接下来要把按钮在不同状态下的样式合并到一起。创建一个round_button.xml文件。它会根据按钮的状态来切换使用不同的样式(指向不同的drawable)来呈现动态的效果。

res/drawable/round_button.xml

<item android:drawable=“@drawable/round_button_pressed”

​ **android:**state_pressed=“true” />

round_button.xml中使用了标签。称为选择器,用来设置与状态相关的效果,比如按钮点击,文本框获取焦点,图片或文字被选中等等,这些状态让控件展现出不同的显示效果。在标签中设置state_pressed,当按钮的压下状态为真时,就选择使用round_button_pressed样式文件;否则使用round_button_normal样式文件。

最后,重新定义按钮的样式,把按钮的背景设为round_button样式。

    <style name=“MyButton" 

​ parent=“android:style/Widget.Holo.Button”>

​ @drawable/round_button

  1. LayerListDrawable

为了在控件上显示层叠的视觉效果,需要使用LayerListDrawable样式。在前面按钮例子的基础上,通过LayerListDrawable给按钮边缘再加上一个圆环。修改round_button_pressed样式文件,使用layer-list标签设置多个item,并且在每一个item中设置独立的显示效果。第一个item显示按钮的红色背景,第二个item设置一个更大的圆形,颜色设置为深红色。最后,把这样两种不同的显示效果叠加在了一起。

在这里插入图片描述

在LayerListDrawable样式中,每一个显示效果都是独立的。把这些独立的效果重叠在一起,就得到了整个控件的显示效果。

(2) 原生资源

Android提供了assets打包应用所需的图片、 XML文件以及其他资源。它被看作是一个随应用打包的微型文件系统。assets目录下的资源要使用AssetManager类来访问。下面给出音频资源的载入函数,它把音频文件的文件名载入到字符串数组中。

private AssetManager assets;

assets = context.getAssets();

private void loadSounds() {

String[] soundNames;

try {

​ soundNames = assets(“sounds”);

Log.i(TAG, “一共” + soundNames.length + “个声音”);

} catch (IOException e) {

Log.e(TAG, “不能列出资源", e);

return;

}

}

本章习题:

1、本单元考核点

各种资源访问方式。
定制控件样式和界面主题的方法。
可绘制资源的使用。
使用assets打包资源的方式。
2、本单元课后习题

1、如何打开res/raw目录中的数据库文件?
答案:在Android中不能直接打开res/raw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources( ).openRawResource方法获得res/raw目录中资源的InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的sQLite数据库文件。
2、说明Android系统中的两种资源。
答案:第一种是res下可编译的资源文件,这种资源文件系统会在R.java里面自动生成该资源文件的ID,(除了raw外,其他资源目录中的资源文件都会被编译),这也是为什么将APK文件解压后无法直接查看XML格式资源文件内容的原因。res目录只能有一层子目录,而且这些子目录必须是预定义的,如res/layout、res/values等都是合法的,而res/abc,res/xyz并不是合法的资源目录。
第二种就是放在assets文件夹下面的原生资源文件,放在这个文件夹下面的文件不会被R文件编译,所以不能像第一种那样直接使用。Android提供了一个工具类,方便获取assets目录下的文件,在assets目录中可以建任意层次的子目录(只受操作系统的限制)。assets与res/raw目录中的资源文件不会做任何处理,所以将APK解压后,这两个目录中的资源文件都会保持原样。

参考资源:

1、Bill Phillips等著,王明发译.Android编程权威指南.北京:人民邮电出版社,2016.

2、移动开发-CSDN:https://www.csdn.net/nav/mobile

原创声明

=======

作者: [ libin9iOak ]


本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任。

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/703513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下的分布式迁移工具dsync使用

一、Linux下的分布式迁移工具dsync使用 dsync 是一个在 Linux 系统上用于迁移文件和目录的工具。它可以在不同的存储设备之间进行数据同步和迁移操作。dsync 是 rsync 工具的一个衍生版本&#xff0c;专注于在本地文件系统之间进行数据迁移。 这里是官网&#xff1a;dsync 1、…

【强化学习】常用算法之一 “DQN”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

5、多层感知机:过拟合解决方法:权重衰退、丢弃法

1、权重衰退 1. 基础概念 实际上&#xff0c;限制特征的数量是缓解过拟合的一种常用技术。然而&#xff0c;简单地丢弃特征对这项工作来说可能过于生硬。我们继续思考多项式回归的例子&#xff0c;考虑高维输入可能发生的情况。多项式对多变量数据的自然扩展称为单项式&#…

微信小程序学习记录3 案例分享<蓝牙小车UI>

效果 页面1 一键连接蓝牙 页面2 控制页面 思路 页面1 旋转动画一键连接蓝牙(写死了device id和uuid) 页面2 轮播图按键 按键绑定不同事件即可

多模态大语言模型综述来啦!一文带你理清多模态关键技术

夕小瑶科技说 原创 作者 | 智商掉了一地、Python 随着 ChatGPT 在各领域展现出非凡能力&#xff0c;多模态大型语言模型&#xff08;MLLM&#xff09;近来也成为了研究的热点&#xff0c;它利用强大的大型语言模型&#xff08;LLM&#xff09;作为“大脑”&#xff0c;可以执…

Linux卸载OpenJDK

1、JDK版本 java -version2、查看当前系统OPENJDK rpm -qa | grep jdk3、卸载 sudo rpm -e --nodeps java-1.8.0-openjdk sudo rpm -e --nodeps java-1.8.0-openjdk-headless sudo rpm -e --nodeps java-1.8.0-openjdk-devel sudo rpm -e --nodeps copy-jdk-configs4、其他 …

爬虫入门指南(3):Python网络请求及常见反爬虫策略应对方法

文章目录 引言HTTP协议与请求方法HTTP协议请求方法 使用Python进行网络请求安装Requests库发送GET请求发送POST请求 反爬虫与应对策略IP限制使用代理IP&#xff1a; 用户代理检测设置User-Agent头部&#xff1a; 验证码参考方案 动态页面请求频率限制未完待续.... 引言 在当今…

Python 基本数据类型(五)

文章目录 每日一句正能量List&#xff08;列表&#xff09;结语 每日一句正能量 营造良好的工作和学习氛围&#xff0c;时刻牢记宗旨&#xff0c;坚定信念&#xff0c;胸怀全局&#xff0c;埋头苦干&#xff0c;对同事尊重信任谅解&#xff0c;发扬团体协作精神&#xff0c;积极…

安装tomcat的步骤与部署服务详解

目录 一安装tomcat步骤 1.首先关闭防火墙跟安全机制 2.安装jdk把jdk包与tomcat的包下载到/opt目录 3.然后用命令查看安装好的版本号 4.安装好jdk后需要把他设置到环境变量中去以免系统找不到 5.下来装tomcat 6.首先把你的tomcat安装包解压 然后包名太长简写成tomcat 7.进…

【单片机】STM32单片机频率计程序,外部脉冲计数程序,基于脉冲计数的频率计程序,STM32F103

文章目录 定时器外部脉冲计数功能程序实现TIM1 定时一秒钟中断TIM2 外部脉冲计数配置TIM3 PWM产生总程序 定时器外部脉冲计数功能 两种方法用于在单片机中实现频率计的功能。 第一种方法是通过定时器来衡量信号的周期&#xff0c;然后将周期转换为频率。在这种方法中&#xf…

异步秒杀逻辑前后端

前端 Sckill.vue <template><div><h2>go语言从入门到放弃</h2><el-button type"danger" click"handleSckill">秒杀</el-button></div> </template><script> export default {name: "Sckill&q…

华为认证 | HCIP-Datacom考试费多少?

华为认证之前版本的是RS体系的&#xff0c;也是我们所称的路由交换宣布结束。 Datacom代替了RS&#xff0c;考试内容和形式也发生了变化&#xff0c;今天就让我们来详细了解一下。 01 HCIP-Datacom考什么 HCIP-Datacom系列认证包含1门核心认证Core Technology和6门子认证。 …

MySQL数据库的优化技术二

纵论 对mysql优化时一个综合性的技术&#xff0c;主要包括 表的设计合理化(符合3NF)添加适当索引(index) [ 四种: 普通索引、主键索引、唯一索引unique、全文索引 ]分表技术( 水平分割、垂直分割 ) 水平分割根据一个标准重复定义几个字段值相同&#xff0c;表名称不同的表&…

七.图像处理与光学之镜头LSC

七.图像处理与光学之镜头LSC Lens Shading视为镜头阴影/镜头暗影,此外,还有称Lens Shading为亮度均匀性的。 7.1 LSC(Lens Shading Correction)现象 具体现象如下: 如图所示: 拍摄纯灰色卡(正常所有像素值一样)时shading的具体现象 上侧称为Luma shading,下侧称为c…

Camtasia Studio 2023永久激活版免费下载

电脑屏幕录制工具Camtasia Studio2023是一款功能非常强大的电脑屏幕录像软件&#xff0c;这款软件目前在国内非常受欢迎。我们可以通过这款软件来录制各种软件使用教程和游戏攻略教程。这样你就可以将自己在电脑上的每一步操作全部录制下来&#xff0c;从而分享给其他人欣赏。 …

logback日志的分片压缩

logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <configuration debug"true"><springProperty name"LOG_PATH" source"shands.log.logPath" defaultValue"/var/delonix/logs/local"…

在 Jetpack Compose 中创建 AppBar

Jetpack Compose 是 Android 的现代 UI 工具库&#xff0c;使用声明性编程简化了 UI 的开发过程。在本文中&#xff0c;我们将学习如何使用 Jetpack Compose 创建 AppBar。 什么是 AppBar&#xff1f; AppBar&#xff0c;也就是我们常说的顶部应用栏&#xff0c;是用户界面的一…

基于YOLOv5系列【n/s/m/l】模型开发构建人体手势目标检测识别分析系统

人体手势检测识别是指通过计算机视觉和深度学习技术&#xff0c;自动地识别和理解人体的手势动作。这项技术可以应用于各种领域&#xff0c;如人机交互、虚拟现实、智能监控等。 下面是一般的人体手势检测识别流程&#xff1a; 数据采集&#xff1a;首先需要收集包含手势动作的…

AI自动生成代码,是时候冷静下来思考如何保障代码安全了

HDC期间可参与华为开发者大会Check新人抽奖活动&#xff0c;活动链接在文末。 华为开发者大会2023将于7月7日与各位开发者进行见面&#xff0c;本次大会的主题演讲内容为&#xff1a;AI重塑千行百业。 自从AI聊天被推出之后&#xff0c;其热度就一直是高居不下。身边的小伙伴们…

【python】—— 基础语法(二)

序言&#xff1a; 在上期&#xff0c;我们已经对python进行了初步的学习和了解。本期&#xff0c;我将继续带领大家学习关于python的基本知识&#xff01;&#xff01; 目录 &#xff08;一&#xff09;顺序语句 &#xff08;二&#xff09;条件语句 1、什么是条件语句 2、…