- 浏览: 94819 次
- 性别:
- 来自: 广州
最新评论
-
wmx11:
melody_hu 写道请问下收到消息后的处理代码是修改的哪一 ...
XMPP实现群聊截图(spark+openfire) -
wanggang0321:
你的spark的客户端界面是如何开发的?我用的eclipse ...
spark二次开发之客户端工具栏 -
melody_hu:
请问下收到消息后的处理代码是修改的哪一地方的源码?可以把实现发 ...
XMPP实现群聊截图(spark+openfire) -
wll52:
有问题在 linux下失效URL oUrl=new URL(s ...
openfire如何获取所有在线用户 -
zzandww:
hi,请教一下这个群是怎么搞的?自己开发的?
XMPP实现群聊截图(spark+openfire)
1. 相关文件夹介绍
在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的。assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不
会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件。在后面会介绍如何读取assets文件夹的资源!
res文件夹里面的多个文件夹的各自介绍(来自网上的Android开发指南中文版内容):
目录 Directory |
资源类型 Resource Types |
res/anim/ |
XML 文件,它们被编译进逐帧动画( frame by frame animation )或补间动画( tweened animation )对象 |
res/drawable/ |
.png 、 .9.png 、 .jpg 文件,它们被编译进以下的 Drawable 资源子类型中: 要获得这种类型的一个资源,可以使用 Resource.getDrawable(id ) 为了获取资源类型,使用 mContext.getResources().getDrawable(R.drawable.imageId) 注意: 放在这里的图像资源可能会被 aapt 工具自动地进行无损压缩优化。比如,一个真彩色但并不需要 256 色的 PNG 可能会被转换为一个带调色板的 8 位 PNG 。这使得同等质量的图片占用更少的资源。所以我们得意识到这些放在该目录下的二进制图像在生成时可能会发生变化。如果你想读取一个图像位流并转 换成一个位图 (bitmap) ,请把图像文件放在 res/raw/ 目录下 , 这样可以避免被自动优化。 |
res/layout/ |
被编译为屏幕布局(或屏幕的一部分)的 XML 文件。 参见布局声明 (Declaring Layout) |
res/values/ |
可以被编译成很多种类型的资源的 XML 文件。 注意
:
尽管这个文件夹里的文件可以任意命名,不过下面使一些比较典型的文件(文件命名的惯例是将元素类型包含在该名称之中):
|
res/xml/ |
任意的 XML 文件,在运行时可以通过调用 Resources.getXML() 读取。 |
res/raw/ |
直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。 要使用这些资源,可以调用 Resources.openRawResource() ,参数是资源的 ID ,即 R.raw.somefilename 。 |
2.自动生成的R class
在项目文件夹的gen文件夹里面有个R.java,我们平常引用的资源主要引用这个类的变量。
注意:R类是自动生成的,并且它不能被手动修改。当资源发生变动时,它会自动修改。
3. 在代码中使用资源
下面是一个引用资源的语法:
R.resource_type.resource_name
或者 android
.R.resource_type.resource_name
其中resource_type
是R的子类,保存资源的一个特定类型。resource_name
是在XML文件定义的资源的name属性
,或者有其他文件类型为资源定义的文件名(不包含扩展名,这指的是drawable文件夹里面的icon.png类似的文件,name=icon)。 Android
包含了很多标准资源,如屏幕样式和按钮背景。要在代码中引用这些资源,你必须使用android进行限定,如android.R.drawable.button_background
。
下面是官方给出的一些在代码中使用已编译资源的正确和错误用法的例子:
- // Load a background for the current screen from a drawable resource.
- this.getWindow().setBackgroundDrawableResource(R.drawable.my_background_image);
- // WRONG Sending a string resource reference into a
- // method that expects a string.
- this.getWindow().setTitle(R.string.main_title);
- // RIGHT Need to get the title from the Resources wrapper.
- this.getWindow().setTitle(Resources.getText(R.string.main_title));
- // Load a custom layout for the current screen.
- setContentView(R.layout.main_screen);
- // Set a slide in animation for a ViewFlipper object.
- mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
- R.anim.hyperspace_in));
- // Set the text on a TextView object.
- TextView msgTextView = (TextView)findViewByID(R.id.msg);
- msgTextView.setText(R.string.hello_message);
查了SDK
Doc,才明白为什么window.setTitle要先Resources.getText,原来setTitle的参数是
CharSequence,Resources.getText(int)返回的是CharSequence;而其他setText的参数有的是
CharSequence,有的是int(这就是Resources变量值)。
同时官方还给了两个使用系统资源的例子:
- //在屏幕上显示标准应用程序的图标
-
public
class MyActivity extends Activity { -
public
void onStart() { - requestScreenFeatures(FEATURE_BADGE_IMAGE);
- super.onStart();
- setBadgeResource(android.R.drawable.sym_def_app_icon);
- }
- }
- //应用系统定义的标准"绿色背景"视觉处理
-
public
class MyActivity extends Activity -
public
void onStart() { - super.onStart();
- setTheme(android.R.style.Theme_Black);
- }
- }
4. xml文件内引用资源
1) 引用自定义的资源
android:text="@string/hello"
这里使用"@"前缀引入对一个资源的引用--在@[package:]type/name形式中后面的文本是资源的名称。在这种情况下,我们不需要指定包名,因为我们引用的是我们自己包中的资源。type是xml子节点名,name是xml属性名:
-
<?xml
version="1.0"
encoding="utf-8"?> - <resources>
-
<string
name="hello">Hello World, HelloDemo!</string> - </resources>
2) 引用系统资源
android:textColor="@android:color/opaque_red" 指定package: android
3) 引用主题属性
另外一种资源值允许你引用当前主题中的属性的值。这个属性值只能在样式资源和XML属性中使用;它允许你通过将它们改变为当前主题提供的标准变化来改变UI元素的外观,而不是提供具体的值。
android:textColor="?android:textDisabledColor"
注意,这和资源引用非常类似,除了我们使用一个"?"前缀代替了"@"。当你使用这个标记时,你就提供了属性资源的名称,它将会在主题中被查找
--因为资源工具知道需要的属性资源,所以你不需要显示声明这个类型(如果声明,其形式就是?android:attr/android:textDisabledColor)
。除了使用这个资源的标识符来查询主题中的值代替原始的资源,其命名语法和"@"形式一致:?[namespace:]type/name
,这里类型可选。
5. 替换资源(为了可替换的资源和配置)
个人理解这个替换资源主要用于适应多种规格的屏幕,以及国际化。对于这部分的内容,请参考http://androidappdocs.appspot.com/guide/topics/resources/resources-i18n.html
,以后再研究!
6. Color Value
语法:
-
<color
name="color_name">#color_value</color>
可以保存在res/values/colors.xml (文件名可以任意)。
xml引用:android:textColor="@color/color_name"
Java引用: int color = Resources.getColor(R.color.color_name)
其中#color_value有以下格式(A代表Alpha通道):
#RGB
#ARGB
#RRGGBB
#AARRGGBB
xml示例(声明两个颜色,第一个不透明,第二个透明色):
-
<?xml
version="1.0"
encoding="utf-8"?> - <resources>
-
<color
name="opaque_red">#f00</color> -
<color
name="translucent_red">#80ff0000</color> - </resources>
7.Color Drawables
语法:
-
<drawable
name="color_name">color_value</drawable>
可以保存在res/values/colors.xml。
xml引用:android:background="@drawable/color_name"
java引用:Drawable redDrawable = Resources.getDrawable(R.drawable.color_name)
color_name和上面的一样。个人认为,一般情况下使用color属性,当需要用到paintDrawable时才使用drawable属性。
xml示例:
-
<?xml
version="1.0"
encoding="utf-8"?> - <resources>
-
<drawable
name="opaque_red">#f00</drawable> -
<drawable
name="translucent_red">#80ff0000</drawable> - </resources>
8. 图片
一般放在res/drawable/
里面。官方提示png (preferred), jpg (acceptable), gif (discouraged),看来一般使用png格式比较好!
xml引用 @[package:]drawable/some_file
java引用 R.drawable.some_file 引用是不带扩展名
9. dimension
语法:
-
<dimen
name="dimen_name">dimen_value单位</dimen>
一般保存为res/values/dimen.xml。
度量单位:
px
(象素): 屏幕实际的象素,常说的分辨率1024*768pixels,就是横向1024px, 纵向768px,不同设备显示效果相同。
in
(英寸): 屏幕的物理尺寸, 每英寸等于2.54厘米。
mm
(毫米): 屏幕的物理尺寸。
pt
(点) : 屏幕的物理尺寸。1/72英寸。
dp/dip
: 与密度无关的象素,一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。但dp和px的比例会随着屏幕密度的变化而改变,不同设备有不同的显示效果。
sp
: 与刻度无关的象素,主要用于字体显示best for textsize,作为和文字相关大小单位。
XML: android:textSize="@dimen/some_name"
Java:
float dimen = Resources.getDimen(R.dimen.some_name)
xml示例:
-
<?xml
version="1.0"
encoding="utf-8"?> - <resources>
-
<dimen
name="one_pixel">1px</dimen> -
<dimen
name="double_density">2dp</dimen> -
<dimen
name="sixteen_sp">16sp</dimen> - </resources>
10. string
下面是官方给出的正确/错误的例子:
- //不使用转义符则需要用双引号包住整个string
-
<string
name="good_example">"This'll work"</string> - //使用转义符
-
<string
name="good_example_2">This\'ll also work</string> - //错误
-
<string
name="bad_example">This won't work!</string> - //错误 不可使用html转义字符
-
<string
name="bad_example_2">XML encodings won't work either!</string>
对于带格式的string,例如在字符串中某些文字设置颜色,可以使用html标签。对于这类型的string,需要进行某些处理,在xml里面不可以被其他资源引用。官方给了一个例子来对比普通string和带格式string的使用:
-
<?xml
version="1.0"
encoding="utf-8"?> - <resources>
-
<string
name="simple_welcome_message">Welcome!</string> -
<string
name="styled_welcome_message">We are <b><i>so</i></b> glad to see you.</string> - </resources>
Xml代码
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textAlign="center"
- android:text="@string/simple_welcome_message"/>
Java代码
- // Assign a styled string resource to a TextView on the current screen.
- CharSequence str = getString(R.string.styled_welcome_message);
- TextView tv = (TextView)findViewByID(R.id.text);
- tv.setText(str);
另外对于带风格/格式的string的处理,就麻烦一点点。官方给了一个例子:
-
<?xml
version="1.0"
encoding="utf-8"?> - <resources>
-
<string
name="search_results_resultsTextFormat">%1$d results for <b>&quot;%2$s&quot;</b></string> - </resources>
这里的%1$d是个十进制数字,%2$s是字符串。当我们把某个字符串赋值给%2$s之前,需要用htmlEncode(String)
函数处理那个字符串:
- //title是我们想赋值给%2$s的字符串
- String escapedTitle = TextUtil.htmlEncode(title);
然后用String.format() 来实现赋值,接着用fromHtml(String) 得到格式化后的string:
- String resultsTextFormat = getContext().getResources().getString(R.string.search_results_resultsTextFormat);
- String resultsText = String.format(resultsTextFormat, count, escapedTitle);
- CharSequence styledResults = Html.fromHtml(resultsText);
11. assets文件夹资源的访问
assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。
1. 先在Activity里面调用getAssets()
来获取AssetManager引用。
2. 再用AssetManager的open(String fileName, int accessMode)
方法则指定读取的文件以及访问模式就能得到输入流InputStream。
3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close()
。
4.调用AssetManager.close() 关闭AssetManager。
发表评论
-
android 简单的音乐播放
2011-08-19 15:37 1122代码如下: package com.test; imp ... -
转 20个Android很有用的代码片段
2011-08-16 17:31 9961:查看是否有存储卡插入 String status=Env ... -
android GoogleMap定位(四)
2011-08-16 16:30 1847根据输入的名称查询 注:地点输入错误的时候会导致程序崩 ... -
android GoogleMap定位(三)
2011-08-16 14:29 1426一个根据GPS信息在地图上的定位的小demo 布局文件mai ... -
android GoogleMap定位(二)
2011-08-16 14:21 1317Android SDK默认不支持Google Map,必需下载 ... -
android GoogleMap定位(一)
2011-08-16 14:13 1242为了在程序中调用GoogleMap,必须先获取GoogleMa ... -
Activity跳转传值
2011-08-11 15:38 2610Activity跳转与传值,主要是通过Intent类来连接多个 ... -
android DatePicker和TimePicke用法
2011-08-10 14:06 7437DatePicker和TimePicker都是从FrameLa ... -
android shape用法
2011-08-09 18:30 1143Android 中常常使用shape来定义控件的一些显示属性 ... -
android表格布局TableLayout
2011-08-09 17:05 5508TableLayout由所表格布局采用行列的形式来管理UI组件 ... -
android视图组件容器组件与布局管理器LinearLayout
2011-08-09 16:30 4805Android应用的所有UI组件都继承了View类,ViewG ... -
Android Intent Action 大全
2011-08-05 16:05 740String ADD_SHORTCUT_ACTI ... -
AndroidManifest.xml文件解析
2011-08-05 15:13 862(本文为转载,原文地址:http://www.cnblog ... -
android系统启动过程
2011-08-05 14:02 1050Android 的启动过程可以分为两个阶段,第一阶段是 ...
相关推荐
Android 使用mediaplayer播放res/raw文件夹中的音乐的实例 (1)在res文件夹中新建一个文件夹重命名为raw,并且将要播放的音乐放到raw文件夹里面 (2)修改layout目录下的xml布局文件,添加3个按钮空间和一个文本...
在Android应用开发中,Assets和Raw文件夹是两个重要的资源存储区域,用于存放非编译的、原始的数据文件。这两个目录都有各自的用途和特点,开发者可以根据需求选择合适的存储位置。 **Android Assets文件** Assets...
本教程将详细讲解如何在Android Studio中实现一个从`res/raw`目录下读取视频资源并自动循环播放的功能。通过提供的`MyPalylocal.zip`压缩包文件,你可以直接导入到你的Android Studio项目中,快速实现这个功能。 1....
在Android中,RAW文件通常被用作内置的音频资源,因为它们可以直接由系统媒体框架处理,无需额外的解码步骤。而MP3是一种广泛使用的有损音频压缩格式,具有较高的压缩比,能在保持相对高质量的同时减小文件大小。 ...
总结起来,"Android之将RAW资源文件写入SD卡工具类"涉及到Android的权限管理、资源操作、文件I/O以及工具类设计等多个核心知识点,对Android开发者来说是一个实用且基础的技能。通过理解并实践这些内容,可以提高...
在Android开发中,资源目录是组织和管理应用中各种资源的关键部分。本篇文章将深入探讨两个重要的资源目录:`assets`和`res/raw`,以及它们之间的差异。 首先,`assets`目录主要用于存放应用程序需要在运行时动态...
Android 使用MediaPlayer播放assets或者raw目录的音频文件 https://blog.csdn.net/qq_31939617/article/details/80491552
本示例“android读取raw和assets下资源文件demo”旨在教你如何在Android应用中有效地读取并处理存储在`res/raw`和`assets`目录下的资源文件。 一、res/raw目录 `res/raw`目录是Android资源系统的一部分,它允许...
本教程将深入讲解如何实现一个能够播放raw资源的`VideoView`,并探讨相关知识点。 ### 1. raw资源目录 在Android项目中,raw资源目录(`res/raw/`)用于存放音频、视频等原始数据文件。这些文件不会经过编译,而是...
本文详细介绍了Android中的资源管理与国际化配置的相关知识点。资源是Android应用程序中不可或缺的部分,合理地管理和使用资源不仅可以提升应用的性能,还能让应用更加国际化。通过上述内容的学习,开发者可以更好地...
本文将详细介绍三个特殊的资源目录:/res/xml、/res/raw和/assets,以及它们各自的作用和用法。 首先,我们来看看/res/xml目录。这个目录主要用于存储XML格式的资源文件,这些文件通常用于定义应用中的数据结构或...
根据提供的文件信息,我们可以归纳出一系列与Android开发相关的知识点,主要涵盖Android应用程序的基本结构、资源管理等内容。下面将对这些知识点进行详细的阐述。 ### 一、Android 应用程序的基本结构 1. **src/...
3. 非UI相关的资源:对于那些不涉及布局或图形设计,但需要在程序中动态读取的资源,raw目录是很好的存放位置。 三、如何访问raw资源 在Java代码中,可以使用以下方式访问raw资源: ```java Resources res = ...
在Android应用开发中,`assets`和`res/raw`目录都是用来存储应用程序资源的重要部分,但它们之间存在一些关键区别。这两个目录都有各自的用途和访问方式,开发者需要根据实际需求来选择合适的存放位置。 首先,我们...
首先,`raw`文件夹是Android项目资源目录中的一个子目录,用于存放原始数据文件,如音频、视频或任何非XML格式的数据。这些文件在编译后会被打包到应用的APK中,通过`R`类可以方便地引用它们。 1. **音频资源的放置...
android编程实现: 1、在res目录下建立raw...2、在您的手机相册目录下(即:DCIM目录)新建两文本文件,分别命名为a1.txt和a2.txt,并将raw目录下的a1.txt和assets目录下a2.txt文件的文本内容复制到新建的同名文件中。
这个压缩包文件"Android代码-文件夹的创建将raw中文件放到SD卡中将assets中文件保存到SD卡中压缩包的解压文件的删除功能.rar"包含了几个关键的Android文件操作知识点。下面我们将详细探讨这些内容。 首先,让我们从...
1.GNSS BASICS NEEDED ...2.HOW TO ACCESS GNSS RAW MEASUREMENTS USING ANDROID APIS 3.OPPORTUNITIES AND PRACTICAL USE OF GNSS RAW MEASUREMENTS 4.THE NEED AND USE CASES FOR HIGHER ACCURACY IN THE MASS MARKET