android系统资源文件
‘壹’ android 中如何找到系统本人的资源文件tabWidgetStyle.xml
如果你说的是“android:attr/tabWidgetStyle”中的这个tabWidgetStyle的话,貌似它并不是在一个单独的XML文件中定义的,而是包含在一个总的style XML中。
如果你下载了SDK的话,可以到这个文件中找找看:platforms\android-XX\data\res\values\styles.xml。
你可能在这个文件中找不到tabWidgetStyle,而是只能找到Widget.TabWidget。那是因为在themes.xml中,把tabWidgetStyle定义成了Widget.TabWidget。
在platforms\android-xx\data\res下面应该也能找到其它一些系统的资源文件。
作用:
1.res:资源文件。
2.drawable:布局文件。
3.layout:布局文件。
4.anim:动画效果文件。
5.values:取值、字符串等。
6.src:代码,至于src内部的目录名称,取决于具体项目结构。
7.libs:库文件。
‘叁’ 怎么知道Android系统中每个文件的作用
只能掌握重点吧。
1.根目录:
src目录---存放源代码文件
gen目录---ADT插件生成的文件,一般不作修改
assets目录---存放资源文件目录,不会在R.java中生成ID
res目录---存放资源文件目录,这里面的每个文件或值都会在R.java中生成一个ID(变量)
AndroidManifest.xml---整个应用程序配置文件,储存一些 包名,版本号,程序图标,程序标签
default.properties---检查版本文件,自动生成,不能修改(修改将被删除)。
2.重点目录及文件
res/drawable-xxxx是存放图片的目录,每个图片需要准备三种分辨率版本.
drawable-hdpi---存放高分辨率版本
drawable-ldpi---存放中分辨率版本
drawable-mdpi---存放低分辨率版
res/layout目录---放置布局文件(xml文件),每个Activity对应一个XML文件
res/value目录--放置存储值的文件(xml)
R.java文件
drawable类---给图片生产的ID
layout类---给布局文件生成ID的
string类---给string.xml里面键值对生成的ID
main.xml文件
控制Activity中控件的位置,每个Activity对应一个此布局文件
string.xml
存放键值对,一般用在程序的多语言版本切换(多个文件,键一样,值不同)
res目录下的文件都会自动在R.java中生成资源id,并且除了res/raw文件夹外都会被编译为二进制文件,res/raw文件夹下的内容会保持原样。res目录不能随意创建子目录。可以通过getResources的相关方法结合其他类进行访问。
assets目录支持任意深度的子目录,其下的文件不会被编译为二进制(保持原样),并且不会生成资源id,必须使用/assets开始的相对路径按照文件的方式进行访问。可以使用AssetManager 结合其他类进行访问。
结合R.java的相关内部类和字段,res/drawable-xxxx目录可以根据系统分辨率自动使用不同的图片资源。例如高分辨率的放在res/drawable-hdpi目录,低分辨率放在res/drawbale-ldpi目录中,在各个dpi的子目录中放置好不同分辨率的图片,在使用R.drawable.resourceid的方式访问时,系统会根据设备屏幕的分辨率自动选择合适的图像进行展示。
‘肆’ android资源文件中怎么表示
1.引用自定义资源。格式:@[package:]type/name
android:text="@string/hello"
2.引用系统资源。格式:@android:type/name
android:textColor="@android:color/opaque_red"
注意:其实@android:type/name是@[package:]type/name 的一个子类
二.@*代表引用系统的非public资源。格式:@*android:type/name
系统资源定义分public和非public。public的声明在:
<sdk_path>\platforms\android-8\data\res\values\public.xml
‘伍’ android系统中的资源类型有哪几种
Android 资源类型
1.字符串资源
>>1.普通字符串
>>2.字符串数组
复制代码
<resources>
<string-array name="planets_array">
<item>aaa</item>
<item>bbb</item>
</string-array>
</resources>
复制代码
获取方式:getResources().getStringArray(R.array.planets_array)
>>3.复数字符串资源
某些自然语言中,不同的数字在使用方法上会有所不同,比如one book,two books。当数量大于1时,会使用不同的名词或其它复数形式;
复制代码
<resources>
<plurals name="numberOfp">
<item quantity="one">one person</item>
<item quantity="other">more persons</item>
</plurals>
</resources>
复制代码
quantity属性的值除了one和other外,还可以是zero,two,few,many;
引用复数字符串:
// 引用数字为1的复数字符串
getResources().getQuantityString(R.pluarlas.numberOfp,1);
// 引用数字为其它值的复数字符串
getResources().getQuantityString(R.pluarlas.numberOfp,10,10);
>>4.占位符格式化字符串
常用的格式化字符串三种方法:
>>1.在字符串中使用引号
字符串中的值虽然可以随意指定,但是当遇到特殊符号时(双引号,单引号)就需要采取特殊的方法来处理这些符号。
如果是单引号(')可以使用转义符(\)或用双引号(")将整个字符串括起来,如果是双引号,可以在双引号前使用转义符(\)。
<resources>
<string name="str1">"This'll work"</string> This'll work
<string name="str2">This\'ll work</string> This'll work
<string name="str3">\"apple\"</string> "apple"
</resources>
>>2.用占位符格式化字符串
使用String.format(String,Object...)方法可以格式化带占位符的字符串,只需要在字符串中插入占位符,就可以使用String.format方法格式化字符串资源,format方法要求的占位符用%1,%,...,%n,其实第n个占位符与format方法的n+1个参数值对应;
<resources>
<!-- $s表示该占位符被字符串替换,$d表示该占位符被整数替换 -->
<string name="str1">hello,%1$s!You have %2$d new message</string>
</resources>
String str1 =String.format(getResources().getString(R.string.str1), "ly", 17);
>>3.使用HTML标签格式化字符串资源
字符串资源支持一些HTML标签,因此可以直接在字符串资源中使用这些HTML标签格式化字符串
字符串资源支持如下的HTML标签
<b>粗体字
<i>斜体定
<u>带下划线的字
有时需要同时使用HTML标签和占位符格式化字符串,如果使用String.format方法格式化字符串,会忽略字符串中的所有HTML标签。为了使format方法可以格式化带
HTML标签的确字符,需要使用Html.formHTML方法处理字符串;
<resources>
<string name="hello_world">Welcome to <b>android</b></string>
<string name="str2">Hello,%1$s! You have <b> %2d new messages </b></string> <!--同时包含占位符和html标签的字符串-->
</resources>
由于需要使用Html.formHTML方法处理字符串,因此HTML标签中的 "<" 需要使用 "<" 表示 ">" 并不需要处理
获取字符串:
String text = String.format(getResources().getString(R.string.str2), "ly", 10);
CharSequence styledText = Html.fromHtml(text);
// 如果format的某个参数包含HTML的特殊字符,如"<","&",可以使用如下方式读取字符串的值;
String escapedUsername = TextUtils.htmlEncode("");
String text1 = String.format(getResources().getString(R.string.str2), "ly", 20);
2.Layout资源
1、如果根节点是View,除了<requestFocus>标签外,不能添加任何子标签,<requestFocus>可能被添加到布局文件的任何View中,表示该标签对应的控件在显示时处于焦点状态,整个布局文件只能有一个<requestFocus>标签
2、根节点是ViewGroup,常用的布局都是ViewGroup的子类
3、重用布局文件
如果想重用某个布局文件,可以使用<include>标签
<include layout="@layout/xx_layout" />
如果想让一个布局文件被另一个布局文件引用(使用<include>标签),可以使用<merge>作为被引用布局文件的根节点,由于<merge>并不会生成任何标签(在大量引用布局文件时不至于生成大量无用的标签),但是xml文件必须要有一个根节点,因此<merge>所起的作用就是作为xml文件的根节点,以使xml文件在编译时不至于出错,可以把<merge>当成<FrameLayout>使用;
3.图像资源
在图像资源中可以存储图像文件,还可以使用xml格式的图像资源来控件图像的状态和行为;
>>1.普通图像资源
Drawable da = getResources().getDrawable(R.drawable.xxx);
>>2.xml图像资源
xml图像资源其实就是在drawable目录中指定的xml文件,此种方式可以额外指定图像的某些属性,如图像拉动、排列方式;
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_launcher"
android:tileMode="repeat" >
</bitmap>
>>3.Nine-Patch图像资源
Nine-Patch图像资源文件必须以9.png作为文件扩展名,如abc.9.png
该图像资源的主要作用是:防止图像的某一部分被拉伸;确定将图像作为背景图的控件中内容显示的位置;
Android SDK本身提供了一个Draw 9-patch的工具,启动<sdk目录>\tools\draw9patch.bat命令启动该工具;
可以通过此工具在png图的四周绘制1个像素粗的直线,上边缘和左边缘的直线分别表示图像在水平和垂直方向可位值的范围。如果水平或垂直方向的某个区域不需要拉伸,则可不绘制相应的直线;右边缘和下边缘的直线分别表示图像所在控件中内容的显示范围,内容只在右边缘和下边缘绘制直线的区域显示,表示内容显示范围和拉伸范围的两给直线有一个重要区别就是表示内容显示范围的直线中间不能断开,而表示拉伸范围的直线中间可以断开;
Nine-Patch图像资源与普通图像资源引用方法相同,在引用时只写文件名,活力.9.png;
>>4.XML Nine-Patch图像资源
Nine-Patch图像资源也有与其对应的xml图像资源,使用<nine-patch>标签来引用Nine-Patch格式的图像,有一个设置抖动的android:dither属性;
>>5.图层资源
图层资源类似于<FrameLayout>不同的是<FrameLayout>标签中可以包含任意的控件,而图层资源每一层都只有是图像,定义图层资源必须使用<layer-list>作为资源文件的根节点,<layer-list>标签中包含多个<item>标签,每一个标签表示一个图像,最后一个<item>标签显示在最顶层;
默认情况下,图像会尽量充满显示图像的范围,图像可能会有拉伸,为了避免图像拉伸,可以在<item>标签中使用<bitmap>标签引用图像;
复制代码
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:bottom="10dip" 底端偏移的像素
android:left="10dip" 左侧偏移的像素
android:right="10dip" ...
android:top="10dip"> ...
<bitmap
android:gravity="center"
android:src="@drawable/hell" />
</item>
</layer-list>
复制代码
某些情况下,可以使用图层来代替<FrameLayout>
>>6.图像状态资源,处理控件不同状态下的显示状态
复制代码
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bm" android:state_focused="true"></item>
<item android:drawable="@drawable/bm" android:state_pressed="true"></item>
<item android:drawable="@drawable/bm"></item>
</selector>
// android:state_focused/pressed设置为true表示当前item的drawable属性为获取焦点和按下时的drawable样式
复制代码
>>7.图像级别(Level)资源
图像资源状态只能指定几种有限的状态,可以通过图像级别指定更多的状态;图像级别是一个整数的区间,可以通过ImageView.setImageLevel或Drawable.setLevel方法切换不同状态的图像;图像级别资源是xml文件,必须以<level-list>为根节点,每一个item表示一个级别区间,下面是一个xml文件;通过ImageView.setImageLevel(level),根据level所在的区间设定显示的图像资源,如果level不在任一区间内则清空ImageView当前图像;
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="2" android:minLevel="0" android:drawable="@drawable/hell" />
<item android:maxLevel="4" android:minLevel="3" android:drawable="@drawable/hell" />
</level-list>
>>8.淡入淡出(Cross-fade)资源
也是切换两个图像(不支持多于两个图像的切换),并且使这两个图像以淡入淡出效果进行切换,如电灯在开关时逐渐变亮或逐渐变暗;
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/hell"/>
<item android:drawable="@drawable/hell"/>
</transition>
TransitionDrawable da = ...;
// 从第一张图片切换到第二张图片,时间效果为1秒
da.startTransition(1000);
// 从第二张图片切换到第一张图片,时间效果为1秒
da.reverseTransition(1000);
>>9.嵌入(insert)图像资源
使用场景:要显示的图像要求要小于装载图像的View(图小于View区域),也是通过xml资源定义,只有一个节点inset。
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/hell"
android:insetLeft="10dip" > <!--图像距离左边的距离,延伸-->上/下/右的距离-->
</inset>
>>10.剪切(Clip)图像资源,使用剪切图像资源可以只显示图像的一部分,如可以通过此来制作进度条;
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal" // 指定截取的方向
android:drawable="@drawable/hell" // 指定要截取的图像
android:gravity="left" > // 指定截取的方式,在此为从左侧开始截取
</clip>
ClipDrawable cd = ...;
cd.setLevel(1000);
上面ClipDrawable.setLevel(level)设置截取的图像宽度,ClipDrawable预设了最大值10000(表示不进行截取),最小值为0(表示不显示);
>>11. 比例(Scale)图像资源
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/hell"
android:scaleGravity="center" // 设置图像显示的位置
android:scaleHeight="70%" // 设置图像显示的高度
android:scaleWidth="80%" > // 设置图像显示的宽度
</scale>
>>12.形状资源
复制代码
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" > shape可以指定就矩形,oval(椭圆),line(直线),ring(圆)
<corners> 定义圆角
</corners>
<gradient
android:angle="45"
android:startColor="#000000"
android:endColor="#FFFFFF" > 定义颜色渐变,从左下角到或上角
</gradient>
<padding> 定义控件内容到边框的距离
</padding>
<stroke> 定义边线
</stroke>
<solid> 定义填充
</solid>
<size> 定义大小
</size>
</shape>
复制代码
13.菜单资源
菜单不仅可以在onCreateContextMenu或onCreateOptionsMenu方法中通过代码创建,还可以在res/menu目录中建立相应的菜单资源文件,并在上面两个方法中加载菜单资源;
菜单资源文件必须以<menu>标签作为根节点,每一个菜单项用一个<item>表示,如果要定义子菜单,可以在<item>标签中包含<menu>标签;如果想将多个菜单项划为一组,可以使用<group>包含多个<item>标签;
复制代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
复制代码
查看MenuInflater.inflate(int,Menu)
复制代码
/**
* Inflate a menu hierarchy from the specified XML resource.
*
* @param menuRes Resource ID for an XML layout resource to load (e.g., <code>R.menu.main_activity</code>)
* @param menu The Menu to inflate into. The items and submenus will be added to this Menu.
*/
public void inflate(int menuRes, Menu menu) {
XmlResourceParser parser = null;
try {
parser = mContext.getResources().getLayout(menuRes);
AttributeSet attrs = Xml.asAttributeSet(parser);
parseMenu(parser, attrs, menu);
} catch ...finally {
if (parser != null) parser.close();
}
}
复制代码
14.样式与主题(style/theme)
>>1.样式style
android中样式和css中样式作用是一样的,都是用于为界面元素定义显示风格,它是一个包含一个或者多个控件属性的集合。
定义样式需要在res/values/styles.xml中进行定义,如下是一个样式的定义:
<style name="textViewStyle">
<item name="android:textSize">22sp</item>
<item name="android:textColor">#FF0000</item>
</style>
<style name="textViewStyle1" parent="textViewStyle"></style><!-- 此样式继承自textViewStyle -->
<style name="textViewStyle.Livingstone"><!-- 样式继承的另一种写法,但不可用此写法继承Android自带的定义样式? -->
<item name="android:textColor">#00FF00</item>
</style>
所有定义的样式都会在R文件中自动生成一个资源ID,加一个点表示样式继承会生成上图所示的资源id;
样式的引用:
<TextView
style="@style/textViewStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="hello" />
>>2.主题Theme
主题应用于整个应用或者activity,样式应用于具体的控件上。主题的应用与样式定义一样,不同的是主题还可以设置窗口的显示风格;主题的引用需要在清单文件中进行引用,如引用到整个应用之上就需要在Application节点中进行配置引用,而引用到单个Activity只需要在此Activity中进行配置引用;
复制代码
<style name="Livingstonetheme"><!--此定义是一个无Title的主题-->
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">?android:windowNoTitle</item>
<!-- 问号表示引用此主题中android:windowNoTitle属性的值 -->
<item name="android:textSize">18sp</item>
</style>
复制代码
android系统定义了一些属性,如android:theme="@android:style/Theme.Dialog",该主题可以让Activity看起来像一个对话框,更多主题可以在文档reference->android->R.style中查看。当主题里面的样式属性值与样式里面的属性值发生冲突的时候会显示样式里面的值;
15.其它资源
在资源文件中还可以包括尺寸(dimen)、整数(integer)、布尔(bool) 、整形数组资源(integer-array)、资源数组(array)、颜色(color)
TypedArray ta = getResources().obtainTypedArray(int id); // 获取数组资源,包括integer-array、array
Final总结:
除了res/values目录中的资源名,其它目录的资源都会以文件名在R类的相应子类中生成变量;而res/values中的资源会以name属性值为变量名在R类的相应子类中生成变量;
‘陆’ android安卓手机系统文件要放在哪个文件夹
Android系统的开放,使其用户可以自己查看系统和SD卡中的文件夹。就系统和SD卡中常见的目录代表什么意思,下面是一个较实用的总结:
一、SD卡中
1. /mnt/sdcard或者/sdcard这是Android手机中SD卡的文件夹路径,其中/mnt/sdcard/是android 2.2或更高版本所使用的,而/sdcard是android 2.1或早期版本的存储卡位置。
2. /mnt/sdcard/dcim或/sdcard/dcim这个DCIM文件夹是干什么用的,这里提示大家,一般数码相机都有DCIM文件夹,其中进入后Camera为手机摄像头拍摄的照片或视频存放位置。同时在DCIM文件夹中还有.thumbnails这个目录,在Linux中开头为“.”的文件夹就是开头为“点”的文件夹是隐藏目录,这里面记录着手机SD卡图片的缩略图。
3. /mnt/sdcard/LOST.DIR或/sdcard/LOST.DIR这个LOST.DIR为SD卡扫描时发现的丢失文件,里面的文件用处不大,可以不用理会。
二、手机或平板电脑中
1. /system/app 这里是android手机rom中的系统应用存放地,如果有Root权限可以将手机rom中自带的应用删除掉,这里面一般包含一个apk文件和odex文件,大家注意文件名一一对应。
2. /data/data 这里是每个安装过应用的用户文件存储位置,一般为设置文件、数据库或临时缓存文件,进入后以每个软件的package name包名来命名。
3. /dev 这里是Linux系统常规文件夹,里面的文件很多都是设备模拟的文件系统,一般用户无需理会。
4. /system/fonts 这里面保存着系统的字体,如果你有root权限,可以往里添加自己喜欢的字体,比如雅黑。
5. /system/framework 这里是android系统的框架,里面保存着系统核心程序或java类库,十分重要里面的任何文件几乎都不要做删除操作。
6. /media/audio 这里面保存着安卓系统默认的铃声,alarms是闹铃提醒的,notification是短信或提示音,ringtones是来电铃声,而ui是一些界面音效,比如键盘敲击声。
7./system/lib 里面保存的是系统底层类库,里面很多都是框架层的实现文件,一般以.so后缀结尾类似windows下的dll文件。
‘柒’ 怎样使用Android中资源文件
1.在代码中使用资源文件在代码中访问资源文件,是通过R类中定义的资源文件类型和资源文件名称来访问的。具体格式为:R.资源文件类型.资源文件名称另外,除了访问用户自定义的资源文件,还可以访问系统中的资源文件。访问系统中的资源文件的格式为:android.R. 资源文件类型.资源文件名称2.在其他资源文件中引用资源文件经常会在布局文件中引用图片、颜色资源、字符串资源和尺寸资源。在其他资源中引用资源的一般格式是:@[包名称:]资源类型/资源名称使用颜色资源颜色值定义的开始时一个#号,后面是Alpha-RGB的格式。例如:#RGB#ARGB#RRGGBB#AARRGGBB引用资源格式:Java代码中:R.color.color_nameXML文件中:@[package:]color/color_name使用时在res\values\目录下,定义一个colors.xml文件,里面存放颜色名字和颜色值的键值对。如:<resources> <color name="red_bg">#f00</color> <color name="blue_text">#0000ff</color></resources>其他资源如字符串、尺寸都是类似的方法。使用字符串资源创建字符串资源文件strings.xml.里面内容也是键值对在Java代码中引用字符串资源R.string.string_name可如下取得:String str = getString(R.string.string_name).toString();在xml文件中引用字符串资源:@[package:]string/string_name使用尺寸资源尺寸资源被定义在res\values\dimens.xml文件中。相对屏幕物理密度的抽象单位
sp和精度无关的像素和dp类似,与刻度无关的像素,主要处理字体大小引用尺寸资源:在Java代码中: R.dimen.dimen_name在xml文件中:@[package:]dimen/dimen_name使用原始XML资源XML文件定义在工程的res\xml\目录下,通过Resources.getXML()方法来访问。获得原始XML文件的思路是,通过getResources().getXml()获得XML原始文件,得到XmlResourceParser对象,通过该对象来判断是文档的开始还是结尾、是某个标签的开始还是结尾,并通过一些获得属性的方法来遍历XML文件,从而访问XML文件的内容。使用drawables资源drawable资源是一些图片或者颜色资源,主要用来绘制屏幕,通过Resources.getDrawable()方法获得。drawable资源分为三类:Bitmap File(位图文件)、Color Drawable(颜色)、Nine-Patch Image(九片图片)。Android中支持的位图文件有png、jpg和gif。引用位图资源的格式:Java代码中:R.drawable.file_nameXML文件中:@[package:]drawable/file_name使用布局(layout)资源 布局资源是Android中最常用的一种资源,将屏幕中组件的布局方式定义在一个XML文件中,类似于Web中的HTML页面。 布局文件位于res\layout\中,名称任意。Android通过LayoutInflater类将XML文件中的组件解析为可视化的视图组件。在Activity中,调用Activity.setContentView()方法,将布局文件设置为Activity的界面,使用findViewById()方法来得到布局中的组件。
‘捌’ 详解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。
转载,仅供参考,祝你愉快,满意请采纳。
‘玖’ 如何引用安卓的资源文件
资源文件
所有的应用程序都由两部分构成:功能(代码指令)和数据(资源)。
使用资源
res/drawable 专门存放png、jpgÉ图标文件。在代码中使用getResources().getDrawable(resourceId)获取该目录下的资源。
res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中。
在代码中使用资源文件
在代码中访问资源文件,是通过R类中定义的资源文件类型和资源文件名称来访问的。
具体格式为:
R.资源文件类型.资源文件名称,除了访问用户自定义的资源文件,还可以访问系统中的资源文件。
访问系统中的资源文件的格式为:
android.R. 资源文件类型.资源文件名称。
‘拾’ 与Android应用程序相关的文件目录都有哪些
在搭建Android开发环境及简单地建立一个HelloWorld项目后,本篇将通过HelloWorld项目来介绍Android项目的目录结构。本文的主要主题如下:
1、HelloWorld项目的目录结构
1.1、src文件夹
1.2、gen文件夹
1.3、Android 2.1文件夹
1.4、assets
1.5、res文件夹
1.6、AndroidManifest.xml
1.7、default.properties
图1、HelloWorld项目目录结构
下面将分节介绍上面的各级目录结构。
1.1、src文件夹
顾名思义(src, source code)该文件夹是放项目的源代码的。打开HelloWorld.java文件会看到如下代码:
package helloworld.test; import android.app.Activity; import android.os.Bundle; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
可以知道:我们新建一个简单的HelloWorld项目,系统为我们生成了一个HelloWorld.java文 件。他导入了两个类android.app.Activity和android.os.Bundle,HelloWorld类继承自Activity且重 写了onCreate方法。
以下说明针对没有学过Java或者Java基础薄弱的人
@Override
在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。
例如,public void onCreate(Bundle savedInstanceState){…….}这种写法是正确的,
如果你写成public void oncreate(Bundle savedInstanceState){…….}这样编译器回报如下错误——
The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,
以确保你正确重写onCreate方法。(因为oncreate应该为onCreate)
而如果你不加@Override,则编译器将不会检测出错误,而是会认为你新定义了一个方法oncreate。
android.app.Activity类:因为几乎所有的活动 (activities)都是与用户交互的,所以Activity类关注创建窗口,你可以用方法setContentView(View)将自己的UI放 到里面。然而活动通常以全屏的方式展示给用户,也可以以浮动窗口或嵌入在另外一个活动中。有两个方法是几乎所有的Activity子类都实现的:
onCreate(Bundle): 初始化你的活动(Activity),比如完成一些图形的绘制。最重要的是,在这个方法里你通常将用布局资源(layout resource)调用setContentView(int)方法定义你的UI,和用findViewById(int)在你的UI中检索你需要编程地 交互的小部件(widgets)。setContentView指定由哪个文件指定布局(main.xml),可以将这个界面显示出来,然后我们进行相关 操作,我们的操作会被包装成为一个意图,然后这个意图对应有相关的activity进行处理。
onPause():处理当离开你的活动时要做的事情。最重要的是,用户做的所有改变应该在这里提交(通常ContentProvider保存数据)。
更多的关于Activity类的详细信息此系列以后的文章将做介绍,如果你想了解更多请参阅相关文档。
android.os.Bundle 类:从字符串值映射各种可打包的(Parcelable)类型(Bundle单词就是捆绑的意思,所有这个类很好理解和记忆)。如该类提供了公有方法—— public boolean containKey(String key),如果给定的key包含在Bundle的映射中返回true,否则返回false。该类实现了Parceable和Cloneable接口,所以 它具有这两者的特性。
1.2、gen文件夹
该 文件夹下面有个R.java文件,R.java是在建立项目时自动生成的,这个文件是只读模式的,不能更改。R.java文件中定义了一个类——R,R类 中包含很多静态类,且静态类的名字都与res中的一个名字对应,即R类定义该项目所有资源的索引。看我们的HelloWorld项目是不是如此,如下图:
图2、R.java对应res
通过R.java我们可以很快地查找我们需要的资源,另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。
1.3、Android 2.1文件夹
该 文件夹下包含android.jar文件,这是一个Java 归档文件,其中包含构建应用程序所需的所有的Android SDK 库(如Views、Controls)和APIs。通过android.jar将自己的应用程序绑定到Android SDK和Android Emulator,这允许你使用所有Android的库和包,且使你的应用程序在适当的环境中调试。例如上面的HelloWorld.java源文件中 的:
import android.app.Activity; import android.os.Bundle;
这里两行代码就是从android.jar导入包。
1.4、assets
包含应用系统需要使用到的诸如mp3、视频类的文件。
1.5、res文件夹
资源目录,包含你项目中的资源文件并将编译进应用程序。向此目录添加资源时,会被R.java自动记录。新建一个项目,res目录下会有三个子目录:drawabel、layout、values。
drawabel-?dpi:包含一些你的应用程序可以用的图标文件(*.png、*.jpg)
layout:界面布局文件(main.xml)与WEB应用中的HTML类同,没修改过的main.xml文件如下(HelloWorld的就没有修改过):
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
values:软件上所需要显示的各种文字。可以存放多个*.xml文件,还可以存放不同类型的数据。比如arrays.xml、colors.xml、dimens.xml、styles.xml
1.6、AndroidManifest.xml
项目的总配置文件,记录应用中所使用的各种组件。这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网 服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此 Activity。AndroidManifest.xml将包含如下设置:application permissions、Activities、intent filters等。
HelloWorld项目的AndroidManifest.xml如下所示:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="helloworld.test" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloWorld" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
关于AndroidManifest.xml现在就讲这么多,此系列后面的文章将单独详细介绍。
1.7、 default.properties
记录项目中所需要的环境信息,比如Android的版本等。
HelloWorld的default.properties文件代码如下所示,代码中的注释已经把default.properties解释得很清楚了:
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.
# Indicates whether an apk should be generated for each density.
split.density=false
# Project target.
target=android-7