189 8069 5689

android资源文件,Android文件

Android获取资源文件的几种方法

1.打包时,将资源放在asset文件夹内,通过AssetsManager获取指定资源:

网站的建设成都创新互联公司专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为成都护栏打桩机等企业提供专业服务。

目标应用和jar中的assets文件夹会合并,所以可以通过获取该应用的此类文件夹来获取目标资源

2.使用library项目

此类方法不能混淆代码,也就是说发布时需要提供library源项目.在引用此lib的目标项目中会看到一个包含已经编译成class.dex的jar文件,这个文件反编译以后仍然是只有代码部分。

3.使用双重library项目

提供一种双层library项目的方法,可以混淆代码,但是xml与图片资源仍然是暴露的,且发布时需要提供二级引用项目,操作上复杂度较高,不如直接提供jar包和资源

4.直接提供jar包和资源(分开)

依然是反射R文件,资源会被暴露给开发者。

Android资源标签属性及优先级(一)

在写前一篇文章 浅述Android Apk打包流程 的时候发现解压后的apk里res的资源文件,有多于我本地项目中的res资源文件夹。

如果我的项目中依赖了Android的一些库,比如design库,design里面有自己的res,那么在打包我的项目的时候,这些res会合并一起打包。

我查看了下,我确实依赖了design等库。

对比一下前三张图,我本地项目没有建anim、anim-v21、animator-v21(不再截图了)等资源文件夹,但是design库有,最终一并打包到我的项目中。

res目录下的文件夹是有命名规则的,不能随便起,为的是要适配不同的设备,而且是要做到最佳的资源匹配。

2.1、资源标签属性及优先级

除了分辨率外,同种资源之间可以有下面许多资源属性标签,它们在匹配过程中是有优先级顺序的。大家可以快速浏览一下即可。以下资源标签修饰语按照优先级从高到低的顺序排列。

3、Locale(语言和区域)

例如en表示英语,fr表示法语,en-rUS表示英语和美国地区。不区分大小写,r用于区分区域码。

4、Layout Direction(布局方向)

ldrtl,布局方向从右到左(阿拉伯语等会这样布局);ldltr,布局方向从左到右,是默认的隐式值。(这就解答了我前面第二个提的问题了)

5、Smallest Screen Width(最小宽度)

swNdp,屏幕的基本尺寸。

sw320dp:适用于320 320 ldpi、320 480 mdpi、480 480 hdpi

sw600dp:适用于600 1024mdpi (7英寸的平板电脑)

sw720dp:适用于720*1280 mdpi (10英寸平板电脑)

当你的屏幕的绝对宽度大于600dp时,屏幕就会自动调用layout-sw600dp文件夹里面的布局。这里的绝对宽度是指手机的实际宽度,即与手机是否横屏没关系,也就是手机较小的边的长度。

6、Screen Width(屏幕宽度)

wNdp ,设备的可用宽度值随着当前是横屏还是竖屏会产生变化,即它表示的是当前真实的宽度值。即当手机竖屏时,为较小边的长度;当手机横屏时,为较长边的长度。

7、Screen Height(屏幕高度)

hNdp,与lScreen Width的使用一样,只是这里指的是相对的高度。指手机相对放置的高度;即当手机竖屏时,为较长边的长度;当手机横屏时,为较小边的长度。

8、Size(屏幕大小)

samll:低密度,最小布局尺寸为320 426dp

normal:中等密度,标准屏幕最小布局尺寸约为320 470dp

large:中等密度,大屏幕最小布局尺寸为480 640dp

xlarge:大于中等密度,最小布局尺寸为720 960dp。基本用于平板电脑。

该配置并不仅适用于指定设备,如果没有匹配的资源,会选择与之最近的。 如果所有资源均大于当前屏幕的尺寸限定符,则系统不会使用这些资源,且应用运行时会崩溃。

9、Ratio(屏幕纵横比)

long:宽屏

notlong:非宽屏

10、Orientation(屏幕方向)

port:竖向的

land:横向的

square:正方形的(我也不知道这个是什么样子的)

11、UI Mode(UI模式)

无、car、desk、 television、appliance、 watch6种模式。(其实我没看明白是干嘛的,哈哈)

12、Night Mode(夜间模式)

night:夜间模式

notnight:非夜间模式

可以通过UiModeManager来开启和关闭这一功能。

13、Density(屏幕像素密度)

ldpi:低密度,约120dpi;mdpi:中等密度,160dpi;hdpi:高密度,240dpi;xhdpi:超高密度,320dpi;xxhdpi:超超高密度,480dpi;xxxhdpi:超超超高密度,640dpi;nodpi:不希望以匹配设备密度的位图资源;tvdpi:主要用于电视,约213dpi。anydpi:适用于所有密度,优先级高于其他限定符。

14、Touch Screen(触摸屏)

notouch:设备不带触摸屏

stylus:触摸屏通过手写笔操作

finger:触摸屏通过手指操作

15、Keyboard(键盘可用性)

keysexposed:设备有可用键盘。如果当前的软键盘被启用,那么即便设备没有键盘或者键盘不可用,这个状态仍可能有效。

keyshidden:设备有键盘,但当前被隐藏,而且没有软键盘启用。

keyssoft:设备当前软键盘启动,即便它处于可见或不可见状态。

16、Text Input(文本输入法)

nokeys:设备不带用用于文本输入的按键

qwerty:设备具有标准硬键盘(无论是否对用户可见)

12key:设备具有 12 键硬键盘(无论是否对用户可见)

17、Navigation State(定位键可用性)

描述定位键是否可用,指的是光标定位,非GPS导航的定位。

navexposed:定位键对用户可用

navhidden:定位键对用户不可用

18、Navigation Method(主要的非触摸屏定位方式)

nonav:设备除了触摸屏外没有其他定位方式

dpad:设备具有用于导航的方向键

trackball:设备具有用于导航的轨迹球

wheel:设备有方向滚轮用于定位,不常用

19、Dimension(尺寸)

20、Version(平台版本)

设备支持的 API 级别。例如v4 对应于 API 级别 4,带有 Android 1.6 或更高版本系统的设备。

2.2、怎么在AS中创建这些文件夹呢?

android下怎么获取res资源文件夹的路径

android无法获取res资源文件夹路径,只能通过系统提供的封装函数访问。

资源文件夹有:

/res/drawable

,通过getresources()访问

/res/values

,通过getresources()访问

/res/layout,通过getresources()访问

/res/xml,通过getresources()访问

/res/raw,通过getresources()访问

/assets,通过getassets()访问

详解Android系统如何找到最匹配的资源文件的

当你需要一个资源文件时,Android系统会在运行时根据当前设备的配置信息从你提供的资源中选择一个文件。为了呈现出Android系统是如何选择一个资源文件的这个流程,假定下面的每个drawable目录包含了相同的图片元素的不同像素版本:

drawable/

drawable-en/

drawable-fr-rCA/

drawable-en-port/

drawable-en-notouch-12key/

drawable-port-ldpi/

drawable-port-notouch-12key/

同时,假定设备的配置信息如下:

Locale = en-GB

Screen orientation = port

Screen pixel density = hdpi

Touchscreen type = notouch

Primary text input method = 12key

通过比较设备的配置信息和可用的资源文件,Android系统从目录drawable-en-port中选择了图片资源。

系统选择出最佳匹配资源文件的算法思路如下:

1. 首先排除那些与设备的配置信息相矛盾的资源文件。

drawable-fr-rCA/ 目录被排除掉, 因为它跟设备的信息 Locale:en-GB 相矛盾。

drawable/

drawable-en/

drawable-fr-rCA/

drawable-en-port/

drawable-en-notouch-12key/

drawable-port-ldpi/

drawable-port-notouch-12key/

注意例外: 屏幕像素密度也是一个限制条件,如果还有目录没有被排除。 即使设备的屏幕密度是hdpi的, drawable-port-ldpi/目录不会被排除,因为每一个屏幕密度在这里被认为是一个点。 更多有用的信息请参考文档:Supporting Multiple Screens 。

2. 从列表中 (table 2)挑选(下一个)最高优先级的匹配项,进行匹配。

3. 是否没有资源文件目录包含这个限制条件?

o 如果没有, 返回第2步 ,同时看看下一个限制条件。在上面的例子中,很显然是“没有”,因此要循环到“语言”这个限制条件是才会遇到下一个限制条件。

o 如果有, 则转到第4步。

4. 排除那些没有包含限制条件的资源文件目录。在上面的例子中,系统会排除所有不包含“语言”这个限制条件的资源文件目录。

drawable/

drawable-en/

drawable-en-port/

drawable-en-notouch-12key/

drawable-port-ldpi/

drawable-port-notouch-12key/

注意例外: 如果限制条件是屏幕像素密度, Android系统会选择跟设备的屏幕密度最相近的那一个。 通常, Android 系统更倾向于缩小一个较大的源图片而不是放大一个较小的源图片。参考 Supporting Multiple Screens。

5. 返回重复执行 2, 3 和4 步,直到仅有一个资源文件目录。在上面的例子中,“屏幕方向”是下一个需要比较的限制条件.。因此,排除那些没有指定屏幕方向的资源文件目录。

drawable-en/

drawable-en-port/

drawable-en-notouch-12key/

这样剩下的目录就只有drawable-en-port这一个了。

因为获取每个需要的资源文件的时候都要执行这个过程,所以需要进一步优化系统的一些不足的地方。 其中一个是,一旦知道了设备的配置信息后,系统会首先排除那些没有匹配项的资源文件目录。 例如, 如果设备配置信息中的“语言”是“英语”(“en”),则不要将那些包含了“语言”这个限制条件但却是其他语言信息的资源文件目录添加到待匹配的资源池中。尽管这样可能会留下那些没有“语言”这个限制条件的资源目录。

对“屏幕尺寸”这个限制条件进行匹配时,如果没有一个更好的资源文件时,系统会使用那些为比当前屏幕小的屏幕设计的资源文件 (例如,如果需要,一个large-size尺寸屏幕的设备会使用normal-size尺寸屏幕的资源文件)。但是,如果可以选择的资源文件所对应的屏幕尺寸都比当前屏幕的尺寸还大,此时系统不会使用这些资源文件,同时如果没有其他更好的资源文件可选的话,你的应用将会崩溃掉。(例如,如果所有的布局资源文件都是以xlarge 为标签的,而当前的设备屏幕是normal-size尺寸的。)

注意: 列表中(table 2)限制条件的优先级比限制条件的数量更加重要,尽管这些限制条件可能会跟设备的配置信息匹配的很好。比如,在第4步的之前,带匹配的资源目录中最后的一项包括三个限制条件(屏幕方向、触屏类型、输入法)可以跟设备信息匹配,但是 drawable-en 目录仅有一个匹配项(语言)。然而,“语言”拥有比其他几个限制条件更高的优先级,所以 drawable-port-notouch-12key 被排除掉。

要了解更多关于如何在你的应用中使用资源文件,请参考Accessing Resources。

转载,仅供参考,祝你愉快,满意请采纳。

Android中项目中各个文件夹的含义和用途详解

原文地址:

1.src:存放所有的*.java源程序。

2.assets:可以存放项目一些较大的资源文件,例如:图片、音乐、字体等。

3.res:可以存放项目中所有的资源文件,例如:图片( .png、 .jpg)、文本等。

4.res/drawable-hdpi:保存高分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。

5.res/drawable-ldpi:保存低分辩率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。

6.res/drawable-mdpi:保存中等分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。

7.res/layout:存放所有的布局文件,主要是用于排列不同的显示组件,在Android程序中要读取此配置。

8.res/values: 存放一些资源文件的信息,用于读取文本资源,在本文件夹之中有一些约定的文件名称:

10.res/raw:自定义的一些原生文件所在目录,像音乐、视频等文件格式。存放直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用 Resources.openRawResource() ,参数是资源的ID也可以用,即R.raw.somefilename , Resources.getRawResource()`方法可以获得这些资源。

11.res/xml:用户自定义的XML文件,所有的文件在程序运行时编译到应用程序之中,在程序运行时可以使用Resources.getXML()方法获取。

12.res/anim:用于定义动画对象。存放定义了补间动画(tweened animation)或逐帧动画(frameby frame animation)的XML文件。(该目录下也可以存放定义property animations的XML文件,但是最好还是分开存放)

13.res/animator:存放定义了propertyanimations(android 3.0新定义的动画框架)的XML文件

14.res/color/:存放定义了颜色状态列表资源(ColorState List Resource)的XML文件

15.res/drawable/:存放定义了图片状态列表资源(ColorState List Resource)的XML文件

16.res/menu/:存放定义了应用程序菜单资源的XML文件。正确创建文件的方法:new Folder,名字menu,new Other——Android——XML,选择menu类型,填写名称,确定即可。菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用menu标签作为根节点。除了menu标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是item和group。

注意:

对于res/color和res/drawable这两个文件中的内容在这作一下详解:

首先说一下color文件夹,在这个文件夹下放的是color_selector.xml等文件,主要是用于背景色的selector,比如TextView中的textColor属性,点击改变TextView中的字体颜色,在这个文件中的文件color_selector.xml中定义如下:

Android中的资源文件放在哪

Android除了提供/res目录存放资源文件外,在/assets目录也会提供存放资源文件,如下图片:

读取assert文件的代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

public String getFromAssets(String fileName){

try {

InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) );

BufferedReader bufReader = new BufferedReader(inputReader);

String line="";

String Result="";

while((line = bufReader.readLine()) != null)

Result += line;

return Result;

} catch (Exception e) {

e.printStackTrace();

}


分享文章:android资源文件,Android文件
分享网址:http://cdxtjz.cn/article/dsdihdj.html

其他资讯