Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android入门教程 | res资源目录简介与shape的绘制和使用

Android入门教程 | res资源目录简介与shape的绘制和使用

原创
作者头像
Android_anzi
修改于 2021-10-29 03:46:30
修改于 2021-10-29 03:46:30
1.7K0
举报

res资源目录简介

简单介绍Android工程中的资源目录(resources),res。

Android里的资源指的是什么?

资源是指代码使用的附加文件和静态内容,例如位图、布局定义、界面字符串、动画说明等。

把资源放进对应的目录后,可使用在项目 R 类中生成的资源 ID 来访问这些资源。形如 R.drawable.icon,R.layout.main_activity。 R类是自动生成的。代表resources。

分组资源类型

将各类资源放入项目 res/ 目录的特定子目录中。 子目录的名字特别重要。我们把不同的资源放到不同的子目录中。

  • animator/:用于定义属性动画的 XML 文件。
  • anim/:用于定义渐变动画的 XML 文件。(属性动画也可保存在此目录中,但为了区分这两种类型,属性动画首选 animator/ 目录。)
  • color/:用于定义颜色状态列表的 XML 文件。
  • drawable/:位图文件(.png、.9.png、.jpg、.gif)或编译为以下可绘制对象资源子类型的 XML 文件: 位图文件、九宫格(可调整大小的位图)、状态列表、形状、动画可绘制对象、其他可绘制对象。
  • mipmap/:适用于不同启动器图标密度的可绘制对象文件。应用图标放这里。 mipmap后面跟着的dpi类别,比如hdpi mdpi,里面的图标尺寸大小是不同的。可以参考默认图标的大小,来切App的图标。如果要省事,可以用一个图标复制进各个目录中。
  • layout/: 用于定义用户界面布局的 XML 文件。放 layout 文件。
  • menu/: 用于定义应用菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件。
  • raw/:需以原始形式保存的任意文件。如要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource()。 但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/ 目录(而非 res/raw/)下。assets/ 中的文件没有资源 ID,因此只能使用 AssetManager 读取这些文件。
  • values/:包含字符串、整型数和颜色等简单值的 XML 文件。其他 res/ 子目录中的 XML 资源文件会根据 XML 文件名定义单个资源,而 values/ 目录中的文件可描述多个资源。对于此目录中的文件, <resources style="box-sizing: inherit; margin-top: 0px; margin-bottom: 0px;"> 元素的每个子元素均会定义一个资源。例如,<string style="box-sizing: inherit;"> 元素会创建 R.string 资源,<color style="box-sizing: inherit;"> 元素会创建 R.color 资源。由于每个资源均使用自己的 XML 元素进行定义,因此您可以随意命名文件,并在某个文件中放入不同的资源类型。 但是,您可能需要将独特的资源类型放在不同的文件中,使其一目了然。 例如,对于可在此目录中创建的资源,下面给出了相应的文件名约定: arrays.xml:资源数组(类型数组)。 colors.xml:颜色值。 dimens.xml:尺寸值。 strings.xml:字符串值。 styles.xml:样式。
  • xml/:可在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。
  • font/:带有扩展名的字体文件(如 .ttf、.otf 或 .ttc),或包含 元素的 XML 文件。

注意:切勿将资源文件直接保存在 res/ 目录内,因为这样会造成编译错误。

最开始阶段,我们接触比较多的是layout目录。如果要添加一些图片,可以直接放进drawable目录。

修改应用图标,应该放进mipmap对应的目录。例如mipmap-hdpi里的图标是72x72像素的,mipmap-mdpi是48x48像素的。 图省事的话,拿一个图标,分别复制进mipmap的所有dpi目录里,一定要统一文件名,比如ic_your_launcher.png。 然后在清单文件AndroidManifest.xml中,修改icon。

代码语言:txt
AI代码解释
复制
<application
        android:icon="@mipmap/ic_your_launcher"

后面如果我们要定义Button,TextView的一些样式,比如设置颜色,背景。会接触到drawable目录。

shape的绘制和使用

工程目录中有一个drawable文件夹,里面存放的是一些静态的图片资源文件。 比如位图文件(.png、.9.png、.jpg、.gif);或一些可绘制对象资源子类型的 XML 文件(本文称为drawable文件)。

当我们想给button或者TextView设定背景时,我们会想到纯色背景。如果要求圆角背景,或是渐变色背景,我们该如何实现呢? 一种办法是制作相应的美术素材,也就是切图。另一种办法是使用xml格式的资源文件。 本文要介绍的是shape。使用这类资源,可以完成一些比较简单的美术设计。

例子

接下来我们新建一个shape试试,要求带有外围边框,有圆角,里面用渐变色填充。 在res/drawable/目录中,右键新建一个Drawable Resource file文件,起名shape_rect_gradient_red.xml。 root element选择shape

代码:

代码语言:txt
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="2dp"
        android:color="#0E30B1" />
    <corners android:radius="6dp" />
    <gradient
        android:centerColor="#F55353"
        android:endColor="#F71515"
        android:startColor="#FD7575" />
</shape>

as的右边可以打开预览,看看效果。 其中

  • android:shape="rectangle"表示的是选择长方形的形状。
  • stroke标签代表的是边框。里面设定边框宽度是2dp,边框颜色是#0E30B1。
  • corners标签代表的是圆角。如果不设置,则默认为直角。这里我们设定圆角的半径为6dp。
  • gradient表示渐变色。分别可以设置起始,中间和结束的颜色值。

在layout中,给Button的background设置使用这个shape。xml的文件名就是它的资源名称。

代码语言:txt
AI代码解释
复制
<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_rect_gradient_red" />

再稍微完善一下这个Button。

代码语言:txt
AI代码解释
复制
<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_rect_gradient_red"
        android:text="RFDev btn 1"
        android:textAllCaps="false"
        android:textColor="#ffffff" />

运行一下,可以看到效果。 

shape介绍

shape又称为“形状可绘制对象”。为了简便,以下都称作shape或者“shape文件”。 shape是一种在 XML 文件中定义的通用形状。经过编译后,可以得到GradientDrawable对象。

资源引用

  • Java 中:R.drawable.filename
  • 在 XML 中:@package:drawable/filename

语法

上面那个栗子我们认识了几个元素,gradient,corners和stroke。下面是语法的详细介绍。

代码语言:txt
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape>
圆角背景的例子

上文介绍了corners的用法。我们来看一个圆角背景的实现方法。 新建文件shape_btn_2_normal.xml

代码语言:txt
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#6CB3DD" />
    <corners android:radius="25dp" />
</shape>

在layout中给TextView使用这个背景。

代码语言:txt
AI代码解释
复制
<TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@drawable/shape_btn_2_normal"
        android:gravity="center"
        android:text="RFDev 圆角背景TextView 1"
        android:textColor="#ffffff" />

TextView的高度设置成了50dp,而背景的圆角半径设置成了25dp。 运行可以看到效果。

如果想要渐变色,再增加gradient的设置就好。

代码中使用资源

在java代码中使用资源,比如在activity中设置背景。

代码语言:txt
AI代码解释
复制
Resources res = getResources();
Drawable shape = ResourcesCompat.getDrawable(res, R.drawable.shape_btn_2_normal, getTheme());

TextView tv = (TextView)findViewById(R.id.tv1);
tv.setBackground(shape);

使用这种方式,我们可以自己实现一些简单的按钮效果。更复杂的颜色和效果,需要美术设计师的支持。

环形的例子

尺寸和长度自己设定。

环形 thumb_round_1.xml

代码语言:txt
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#ffffff" />
    <stroke
        android:width="@dimen/audio_seek_bar_thumb_ring_width"
        android:color="#7095fc" />
    <size
        android:width="@dimen/audio_seek_bar_thumb_size"
        android:height="@dimen/audio_seek_bar_thumb_size" />
</shape>

带渐变的环形 thumb_round_progress_1.xml

代码语言:txt
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="oval">
            <size
                android:width="@dimen/audio_seek_bar_thumb_size"
                android:height="@dimen/audio_seek_bar_thumb_size" />
            <solid android:color="#ffffff" />
        </shape>
    </item>
    <item>
        <shape
            android:innerRadius="4dp"
            android:thicknessRatio="6"
            android:shape="ring"
            android:useLevel="false">
            <gradient
                android:endColor="#ffffff"
                android:startColor="#7095fc"
                android:type="sweep" />
            <size
                android:width="@dimen/audio_seek_bar_thumb_size"
                android:height="@dimen/audio_seek_bar_thumb_size" />
        </shape>
    </item>
</layer-list>

Android零基础入门教程视频参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
用户1155943
2018/01/04
2.6K0
Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android资源那些事儿
--以下:正文部分-- Android的设计哲学为:设计与表现分离。 这样有利于程序的解耦。所以我们才可以在XML文件中定义各种资源类型,并在其他的xml文件或java代码中进行引用。
用户2802329
2018/08/07
9610
Android资源那些事儿
Android – Drawable 详解
很早看过这篇文章,并做了笔记,后来看到群里的小伙伴有问相关Drawable的问题,就把这篇翻译过来的文章给放出来了。大家一起学习,一起进步。想看原文的小伙伴可以点击下面的链接。 原文地址 前言 Drawable是可以绘制到屏幕上的图形。 Drawable用于定义形状,颜色,边界,渐变等,然后将其应用于Activity中的View。 这通常用于自定义显示在特定View。 Drawable倾向于在XML中定义,然后可以通过XML或Java代码应用于View。 有关Android的每个版本的默认Drawab
code_horse
2018/07/02
5.7K0
Android项目实战(三十二):圆角对话框Dialog
前言:   项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框。   对话框包括:1、圆角         2、app图标 , 提示文本,关闭对话框的"确定"按钮   难点:1、对话框
听着music睡
2018/05/18
2.5K1
Android Button详解
所以本节 只对Button进行讲解,另外Button是TextView的子类,所以TextView上很多属性也可以应用到Button 上!我们实际开发中对于Button的,无非是对按钮的几个状态做相应的操作,比如:按钮按下的时候 用一种颜色,弹起又一种颜色,或者按钮不可用的时候一种颜色这样!上述实现无非是通过StateListDrawable这种Drawable资源来实现,即编写一个drawable的资源文件,就说这么多, 直接开始本节内容~
奶油话梅糖
2021/03/19
1.3K0
Android项目实战(三十六):给背景加上阴影效果
圆角背景大家应该经常用: 一个drawable资源文件  里面控制corner圆角 和solid填充色  <shape xmlns:android="http://schemas.android.co
听着music睡
2018/05/18
1.7K0
Android实战_note1(MyMirror_一款小型摄像处理的App)
1.1 Activity.java全文: 注意代码中的注释,其中 handler.sendEmptyMessageDelayed(1,3000); 这个方法比较有趣
凌川江雪
2018/09/13
4490
Android实战_note1(MyMirror_一款小型摄像处理的App)
Android Kotlin/Java 动态设置 shape/drawable 等状态效果
和尚我最近遇到一个小需求,程序里面有个别页面,需要动态的调整某个页面的样式,包括一键变灰等效果。 以前页面是用 shape 和 drawable 之类实现的效果。现在需要用 Kotlin/Java 代码实现动态修改。由于和尚我技术浅浅,仅整理一下遇到一些坑。
阿策小和尚
2019/08/12
2.1K0
Android Kotlin/Java 动态设置 shape/drawable 等状态效果
Android 天气APP(二十五)地图天气(下)嵌套滑动布局渲染天气数据
上篇文章中,完成了对地图的控制,那么这篇文章中完成对天气数据的渲染。 完成这篇文章实现的效果如下,如果你觉得不行那就可以不用看下面了。
晨曦_LLW
2020/09/25
2K0
Android学习第一弹:Android通过用代码画虚线椭圆边框背景来学习一下shape的用法
学习Shape的用法 非著名程序员 在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的形状,shape可以绘制矩形环形以及椭圆,所以只需要用椭圆即可,在使用的时候将控件
非著名程序员
2018/02/01
2.3K0
Android学习第一弹:Android通过用代码画虚线椭圆边框背景来学习一下shape的用法
常用控件之Button详解
小伙伴们肯定都有在玩儿一些游戏,比如和平精英,在界面上展示的名字,其实就是Android中咱们上一篇介绍到的TextView控件。而今天,我们再给大家带来一个非常好玩儿的控件,这个控件可以结合咱们之前的讲到的内容做很多有趣的事情~
下码看花
2019/09/02
1.5K0
常用控件之Button详解
Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐
项目请在真机(自己的手机)上测试运行,因为我不喜欢用虚拟机。 为了不浪费您的时间,先看一下运行的效果图, 一进去先进行音乐扫描,然后列表展示出来,点击即可播放。
晨曦_LLW
2020/09/25
3.1K0
【Android从零单排系列八】《Android视图控件——Button》
小伙伴们,在上文中我们介绍了Android视图控件EditText控件,本文我们继续盘点,介绍一下Android视图控件中的第三个控件——Button。
再见孙悟空_
2023/02/10
5260
【Android从零单排系列八】《Android视图控件——Button》
跟我学Android之七 资源文件
文件位于res\values目录下,根元素是<resources></resources>标记,在该元素中,包括以下3个子元素 <array>子元素:用于定义普通类型的数组。 <integer-array>子元素:用于定义整数数组。 <string-array>子元素:用于定义字符串数组
张哥编程
2024/12/18
1150
相关推荐
Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档