- 浏览: 242003 次
- 性别:
- 来自: 广州
-
最新评论
-
Janne:
你好 有源代码?可以发到我的邮箱里学学吗?2731049993 ...
achartengine画出动态折线图的效果 -
anbo724:
我的邮箱 anbo724@gmail.com谢谢@
achartengine画出动态折线图的效果 -
anbo724:
你好 请问有源码没《?谢谢
achartengine画出动态折线图的效果 -
weiday123:
额,觉得这个会不会占堆内存?
AdapterView、Adapter优化 -
wen742538485:
为什么没有呢?权限没加还是发创建了给你删了再想创建?是不允许重 ...
Android中为你的应用程序添加桌面快捷方式
资源是您在代码中使用到的并且在编译时被打包进您的应用程序的附加文件。Android支持多种不同的文件,包括XML、PNG和JPEG文件。XML文件的格式决定于其描述的内容。这些文件将描述文件支持的类型、语法或格式。
处于加载效率的考虑,资源被从代码中分离出来,而且XML文件被编译进二进制代码中。字符串,类似的会被压缩存储为更经济的格式。处于这样或那样的原因,Android平台中会存在很多不同的资源和资源定义文件。
这些文件包括以下部分:
资源
o 创建资源
o 使用资源
§ 在代码中使用资源
§ 引用资源
§ 引用主体属性
§ 使用系统属性
o 更改资源
o 资源引用
o 术语表
国际化(l18N)
配合资源引用文档,Android提供了一套经济的资源处理技术。他转化了大量的资源信息,使Android在运行时无需了解文档的内容,仅仅在您需要的时候指导他在哪儿就可以了。
资源
这一节包含了与资源有关联的术语表和一系列使用资源的代码事例。更完整的Android资源指南请参看“资源”一章。
Android资源系统保存所有与代码无关资源的存根。您可以使用Resources类访问您应用程序的资源;与应用程序相关联的资源实例可以通过Context.getResources()得到。
一个应用程序的资源可以被构建系统在构建时编译进二进制的应用程序里。为了使用资源,您需要正确的初始化您应用程序中的资源树并且构建您的应用程序。在构建过程的部分,每个资源的标识被产生,您可以在代码中使用他们。这些标识允许编译器校验您应用程序中的代码和资源定义是否匹配。
有关本章的其他细节请参见教程如何使用资源的部分。
创建资源
Android支持字符串,位图和许多其他类型的资源。每一种资源定义文件的语法和格式及保存的位置取决于其依赖的对象。通常,您可以通过三种文件创建资源:XML文件(除位图和原生文件外),位图文件(作为图片)和原生文件(所有其他的类型,比如声音文件)。事实上,这里有两种不同类型的XML文件,一种是作为资源被编译近应用程序,另一种怎是资源的描述,被aapt使用。下面的表格详细说明了这些XML文件的类型和结构。
您可以在您项目res/目录下的适当子目录下创建和存储资源文件。Android使用资源编译器访问资源所在的子目录和格式化的文件。下面的表格列出了每一种资源的文件类型。参见“资源引用”一节可以了解关于对象、语法和格式方面的内容。
目录
资源类型
res/anim
XML文件编译为桢序列动画或者自动动画对象。
res/drawable
.png,9.png,.jpg文件被编译为Drawable资源子类型:
使用Resources.getDrawable(id)可以获得资源类型
位图文件
9-patchs(可变位图文件)
res/layout
资源编译为屏幕布局器。参见“布局器”一章
res/values
XML 文件可以被编译为多种资源
注意:不像其他res下的目录,这个目录可以包含多个资源描述文件。XML文件元素类型控制着这些资源被R类放置在何处。
这些文件可以自定义名称。这里有一些约定俗成的文件。
arrays.xml 定义数组。
colors.xml 定义可绘制对象的颜色和字符串的颜色。使用Resources.getDrawable()和Resources.getColor()都可以获得这些资源。
dimens.xml 定义尺度。使用Resources.getDimension()可以获得这些资源
strings.xml 定义字符串(使用Resources.getString()或者更适合的Resources.getText()方法获得这些资源。Resources.getText()方法将保留所有用于描述用户界面样式的描述符,保持复杂文本的原貌。
styles.xml 定义样式对象
res/xml
自定义的XML文件。这些文件将在运行时编译近应用程序,并且使用Resources.getXML()方法可以在运行时获取。
res/raw
自定义的原生资源,将被直接拷贝入设备。这些文件将不被压缩近您的应用程序。使用带有ID参数的Resources.getRawResource()方法可以获得这些资源,比如R.raw.somefilename。
资源被最终编译近APK文件。Android创建包装类R,您可以用他找回资源。R包含一些与资源所在目录同名的子类。
全局资源
很多资源都允许您定义颜色。Android接受web风格的颜色定义-一组十六进制的颜色值,按照以下序列排列:#RGB,#ARGB,#RRGGBB,#AARRGGBB。
所有的颜色都支持ALPHA通道,头两位十六进制数字指定透明度。0在ALPHA通道中表示全透明,默认值是不透明。
使用资源
这一节讲述如何使用您所创建的资源,包括:
· 在代码中使用资源 如何在代码中使用资源。
· 如何引用其他资源中的资源 您可以从其他资源中引用资源。您可以重新使用资源内部的通用资源。
· 支持资源更替 您可以在加载时依据语言、显示配置和主机硬件的不同指定不同的资源。
在编译时,Android生成名为R的类。R包含您应用程序所用到的所有的类。这个类包含一些与res下子目录同名的子类。这些子类包含每一个您在资源文件中定义的资源的标识。这些资源标识可以在您的代码中引用。这里有一段简单的资源文件,包含一些文字,布局器和图片资源。
注意:R类是自动生成的,并且它不能被手动修改。当资源发生变动时,它会自动修改。
package com.android.samples;
public final class R {
public static final class string {
public static final int greeting=0x0204000e;
public static final int start_button_text=0x02040001;
public static final int submit_button_text=0x02040008;
public static final int main_screen_title=0x0204000a;
};
public static final class layout {
public static final int start_screen=0x02070000;
public static final int new_user_pane=0x02070001;
public static final int select_user_list=0x02070002;
};
public static final class drawable {
public static final int company_logo=0x02020005;
public static final int smiling_cat=0x02020006;
public static final int yellow_fade_background=0x02020007;
public static final int stretch_button_1=0x02020008;
};
};
在代码中使用资源
在代码中使用资源需要知道完整的资源ID和您的资源对象类型。下面是资源引用语法:
R.resource_type.resource_name 或者 android.R.resource_type.resource_name
resource_type是R类中保存制定类型资源的子类。resource_name是定义在XML文件中的资源名或者被其他文件类型所定义的资源文件名(无扩展名)每一类型的资源都依据其类型,被添加入某一指定的R子类;学习R子类的类型关系请参考资源引用一节。您的应用程序引用已被编译的资源时可以不带包名(比如R.resource_type.resource_name)。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);
引用资源
一个属性值(或资源)同样可以引用资源。这种用法常在资源布局器文件中用于文字和图片(定义在其他文件中)。这种方法可以引用任何资源,包括颜色和整数。
比如,如果我们有一个颜色资源,我们可以写一个布局器文件,在其中指定文本颜色和尺寸。
<?xml version="1.0" encoding="utf-8"?>
<EditText id="text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="Hello, World!" />
注意,“@”前缀声明这是一个资源引用—随后的文本是以@[package:]type/name形式提供的资源名。在这个例子中我们不需要指明特定的包,因为我们在我们自己的包中引用。引用一个系统文件时,我们需要这样写:
<?xml version="1.0" encoding="utf-8"?>
<EditText id="text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textColor="@android:color/opaque_red"
android:text="Hello, World!" />
在其他的例子中您会经常看到使用资源引用实现本地化。
<?xml version="1.0" encoding="utf-8"?>
<EditText id="text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textColor="@android:color/opaque_red"
android:text="@string/hello_world" />
这种简便的方法可以在资源之间引用。比如,我们可以创建一个新的可绘制对象,一个真实存在的图片的别名:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable id="my_background">@android:drawable/theme2_background</drawable>
</resources>
引用主题属性
其他种类的资源可以引用当前主题的属性值。这些属性只能是样式资源或XML属性。利用这种方法,您可以定制您的UI界面,使其与当前主题保持风格上的统一。
下面的例子展示了如何使用系统主题设置布局器中的文本颜色:
<?xml version="1.0" encoding="utf-8"?>
<EditText id="text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textColor="?android:textDisabledColor"
android:text="@string/hello_world" />
注意:引用主题属性的方法和引用资源的方法很相似,仅仅是用“?”替代了“@”。当您使用这个标记,你所提供的资源名必须能够在主题属性中找到,因为资源工具认为这个资源属性是被期望得到的,您不需要明确的支出他的类型(?android:attr/android:textDisabledColor)。
使用系统资源
许多包含于系统之中的资源是能被应用程序所访问的。所有的资源被定义在android.R类中。比如,您可以使用一下代码在屏幕上显示标准应用程序的ICON:
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);
}
}
为语言和配置提供可更换的资源
您可以为您的应用程序选择不同的UI语言和硬件配置。注意,尽管您可以使用不同的字符串,布局管理器和其他的很多资源,SDK不会暴露方法支持您显示的指定何种资源需要被加载。Android识别整套资源的硬件和本地化属性,而后适当的加载他们。用户可以在设备的设置面板中更换语言设置。
为了包含可更换资源,创建平行的资源目录,以限定的方式命名这些目录,配置文件也同样适用(语言、屏幕等)。下面的例子给出同时支持英语和法语的方法:
MyApp/
res/
values-en/
strings.xml
values-fr/
strings.xml
Android支持多种命名限定和多样的值风格。添加这些信息到资源目录末尾,使用连接号分离。您可以为单个目录添加多段限定。但是他们需要保持一定顺序以方便阅读和理解。下面的例子就是一个带有限定的可绘制对象资源目录的全名:
MyApp/
res/
drawable-en-rUS-port-160dpi-finger-keysexposed-qwerty-dpad-480x320/
更具代表性的,您可能需要指定一些资源配置参数。您也许需要除去完整列表中的一些值,但是还有很多很多值被保留在列表中:
MyApp/
res/
drawable-en-rUS-finger/
drawable-port/
drawable-port-160dpi/
drawable-qwerty/
限定词
值
语言
两字节ISO 639-1 低位的语言编码,比如:en, fr, es
区域
两字节ISO 3166-1-alpha-2 带有小写"r"前缀的大写地区编码。如: rUS, rFR, rES
屏幕方向
port, land, square
屏幕像素密度
92dpi, 108dpi, etc.
触摸屏类型
notouch, stylus, finger
用户是否可以使用键盘
keysexposed, keyshidden
默认的文字输入方法
nokeys, qwerty, 12key
默认的非触摸导航方法
notouch, dpad, trackball, wheel
屏幕尺寸
320x240, 640x480, etc. 较大的尺寸必须首先声明。
次列表不包括设备定制的参数,比如信号、商标等。所有应用程序应该知道的信息都需要按照上面的列表信息编码。
这里有一些命名的通用原则:
· 值之间用连接号连接
· 值是大小写敏感的,比如
o 一个指定的drawable目录必须命名为drawable-port,而不是drawable-PORT。
· 每种限定词只能有一种选择,您不能命名目录为drawable-rEN-rFR/。
· 您可以添加多种限定词,但是每个限定词必须在在上面列表中。比如drawable-en-rUS-land表明其用于直板的美式英语设别上。
· 带有限定词的目录不能被嵌套,比如,res/drawable/drawable-en是不允许的。
· 资源引用在语法中表示为未加修饰的表达式,比如 MyApp/res/drawable-port-92dp/myimage.png,在XML中表示为:@drawable/myimage,在代码中表示为:R.drawable.myimage。
Android如何找到最匹配的目录
Android将根据配置文件挑选资源,挑选过程为:
1. 排除所有和配置文件中指定的当前设备参数不匹配的资源。比如,如果屏幕像素密度为108dpi,下面所列出的目录中,只有MyApp/res/drawable-port-92dpi/会被排除。
MyApp/res/drawable/myimage.png
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
MyApp/res/drawable-port-92dpi/myimage.png
2. 接下来系统将根据限定字的多少来筛选。例如,如果您的本地系统识别为en-GB编码的便携设备,随后我们还剩两个目录可以匹配。
MyApp/res/drawable/myimage.png
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
3. 选择机制将根据配置文件中定义的优先级,优先级定义于上面的列表顺序中。
4. MyApp/res/drawable-en/myimage.png
5. MyApp/res/drawable-port/myimage.png
处于加载效率的考虑,资源被从代码中分离出来,而且XML文件被编译进二进制代码中。字符串,类似的会被压缩存储为更经济的格式。处于这样或那样的原因,Android平台中会存在很多不同的资源和资源定义文件。
这些文件包括以下部分:
资源
o 创建资源
o 使用资源
§ 在代码中使用资源
§ 引用资源
§ 引用主体属性
§ 使用系统属性
o 更改资源
o 资源引用
o 术语表
国际化(l18N)
配合资源引用文档,Android提供了一套经济的资源处理技术。他转化了大量的资源信息,使Android在运行时无需了解文档的内容,仅仅在您需要的时候指导他在哪儿就可以了。
资源
这一节包含了与资源有关联的术语表和一系列使用资源的代码事例。更完整的Android资源指南请参看“资源”一章。
Android资源系统保存所有与代码无关资源的存根。您可以使用Resources类访问您应用程序的资源;与应用程序相关联的资源实例可以通过Context.getResources()得到。
一个应用程序的资源可以被构建系统在构建时编译进二进制的应用程序里。为了使用资源,您需要正确的初始化您应用程序中的资源树并且构建您的应用程序。在构建过程的部分,每个资源的标识被产生,您可以在代码中使用他们。这些标识允许编译器校验您应用程序中的代码和资源定义是否匹配。
有关本章的其他细节请参见教程如何使用资源的部分。
创建资源
Android支持字符串,位图和许多其他类型的资源。每一种资源定义文件的语法和格式及保存的位置取决于其依赖的对象。通常,您可以通过三种文件创建资源:XML文件(除位图和原生文件外),位图文件(作为图片)和原生文件(所有其他的类型,比如声音文件)。事实上,这里有两种不同类型的XML文件,一种是作为资源被编译近应用程序,另一种怎是资源的描述,被aapt使用。下面的表格详细说明了这些XML文件的类型和结构。
您可以在您项目res/目录下的适当子目录下创建和存储资源文件。Android使用资源编译器访问资源所在的子目录和格式化的文件。下面的表格列出了每一种资源的文件类型。参见“资源引用”一节可以了解关于对象、语法和格式方面的内容。
目录
资源类型
res/anim
XML文件编译为桢序列动画或者自动动画对象。
res/drawable
.png,9.png,.jpg文件被编译为Drawable资源子类型:
使用Resources.getDrawable(id)可以获得资源类型
位图文件
9-patchs(可变位图文件)
res/layout
资源编译为屏幕布局器。参见“布局器”一章
res/values
XML 文件可以被编译为多种资源
注意:不像其他res下的目录,这个目录可以包含多个资源描述文件。XML文件元素类型控制着这些资源被R类放置在何处。
这些文件可以自定义名称。这里有一些约定俗成的文件。
arrays.xml 定义数组。
colors.xml 定义可绘制对象的颜色和字符串的颜色。使用Resources.getDrawable()和Resources.getColor()都可以获得这些资源。
dimens.xml 定义尺度。使用Resources.getDimension()可以获得这些资源
strings.xml 定义字符串(使用Resources.getString()或者更适合的Resources.getText()方法获得这些资源。Resources.getText()方法将保留所有用于描述用户界面样式的描述符,保持复杂文本的原貌。
styles.xml 定义样式对象
res/xml
自定义的XML文件。这些文件将在运行时编译近应用程序,并且使用Resources.getXML()方法可以在运行时获取。
res/raw
自定义的原生资源,将被直接拷贝入设备。这些文件将不被压缩近您的应用程序。使用带有ID参数的Resources.getRawResource()方法可以获得这些资源,比如R.raw.somefilename。
资源被最终编译近APK文件。Android创建包装类R,您可以用他找回资源。R包含一些与资源所在目录同名的子类。
全局资源
很多资源都允许您定义颜色。Android接受web风格的颜色定义-一组十六进制的颜色值,按照以下序列排列:#RGB,#ARGB,#RRGGBB,#AARRGGBB。
所有的颜色都支持ALPHA通道,头两位十六进制数字指定透明度。0在ALPHA通道中表示全透明,默认值是不透明。
使用资源
这一节讲述如何使用您所创建的资源,包括:
· 在代码中使用资源 如何在代码中使用资源。
· 如何引用其他资源中的资源 您可以从其他资源中引用资源。您可以重新使用资源内部的通用资源。
· 支持资源更替 您可以在加载时依据语言、显示配置和主机硬件的不同指定不同的资源。
在编译时,Android生成名为R的类。R包含您应用程序所用到的所有的类。这个类包含一些与res下子目录同名的子类。这些子类包含每一个您在资源文件中定义的资源的标识。这些资源标识可以在您的代码中引用。这里有一段简单的资源文件,包含一些文字,布局器和图片资源。
注意:R类是自动生成的,并且它不能被手动修改。当资源发生变动时,它会自动修改。
package com.android.samples;
public final class R {
public static final class string {
public static final int greeting=0x0204000e;
public static final int start_button_text=0x02040001;
public static final int submit_button_text=0x02040008;
public static final int main_screen_title=0x0204000a;
};
public static final class layout {
public static final int start_screen=0x02070000;
public static final int new_user_pane=0x02070001;
public static final int select_user_list=0x02070002;
};
public static final class drawable {
public static final int company_logo=0x02020005;
public static final int smiling_cat=0x02020006;
public static final int yellow_fade_background=0x02020007;
public static final int stretch_button_1=0x02020008;
};
};
在代码中使用资源
在代码中使用资源需要知道完整的资源ID和您的资源对象类型。下面是资源引用语法:
R.resource_type.resource_name 或者 android.R.resource_type.resource_name
resource_type是R类中保存制定类型资源的子类。resource_name是定义在XML文件中的资源名或者被其他文件类型所定义的资源文件名(无扩展名)每一类型的资源都依据其类型,被添加入某一指定的R子类;学习R子类的类型关系请参考资源引用一节。您的应用程序引用已被编译的资源时可以不带包名(比如R.resource_type.resource_name)。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);
引用资源
一个属性值(或资源)同样可以引用资源。这种用法常在资源布局器文件中用于文字和图片(定义在其他文件中)。这种方法可以引用任何资源,包括颜色和整数。
比如,如果我们有一个颜色资源,我们可以写一个布局器文件,在其中指定文本颜色和尺寸。
<?xml version="1.0" encoding="utf-8"?>
<EditText id="text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="Hello, World!" />
注意,“@”前缀声明这是一个资源引用—随后的文本是以@[package:]type/name形式提供的资源名。在这个例子中我们不需要指明特定的包,因为我们在我们自己的包中引用。引用一个系统文件时,我们需要这样写:
<?xml version="1.0" encoding="utf-8"?>
<EditText id="text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textColor="@android:color/opaque_red"
android:text="Hello, World!" />
在其他的例子中您会经常看到使用资源引用实现本地化。
<?xml version="1.0" encoding="utf-8"?>
<EditText id="text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textColor="@android:color/opaque_red"
android:text="@string/hello_world" />
这种简便的方法可以在资源之间引用。比如,我们可以创建一个新的可绘制对象,一个真实存在的图片的别名:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable id="my_background">@android:drawable/theme2_background</drawable>
</resources>
引用主题属性
其他种类的资源可以引用当前主题的属性值。这些属性只能是样式资源或XML属性。利用这种方法,您可以定制您的UI界面,使其与当前主题保持风格上的统一。
下面的例子展示了如何使用系统主题设置布局器中的文本颜色:
<?xml version="1.0" encoding="utf-8"?>
<EditText id="text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textColor="?android:textDisabledColor"
android:text="@string/hello_world" />
注意:引用主题属性的方法和引用资源的方法很相似,仅仅是用“?”替代了“@”。当您使用这个标记,你所提供的资源名必须能够在主题属性中找到,因为资源工具认为这个资源属性是被期望得到的,您不需要明确的支出他的类型(?android:attr/android:textDisabledColor)。
使用系统资源
许多包含于系统之中的资源是能被应用程序所访问的。所有的资源被定义在android.R类中。比如,您可以使用一下代码在屏幕上显示标准应用程序的ICON:
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);
}
}
为语言和配置提供可更换的资源
您可以为您的应用程序选择不同的UI语言和硬件配置。注意,尽管您可以使用不同的字符串,布局管理器和其他的很多资源,SDK不会暴露方法支持您显示的指定何种资源需要被加载。Android识别整套资源的硬件和本地化属性,而后适当的加载他们。用户可以在设备的设置面板中更换语言设置。
为了包含可更换资源,创建平行的资源目录,以限定的方式命名这些目录,配置文件也同样适用(语言、屏幕等)。下面的例子给出同时支持英语和法语的方法:
MyApp/
res/
values-en/
strings.xml
values-fr/
strings.xml
Android支持多种命名限定和多样的值风格。添加这些信息到资源目录末尾,使用连接号分离。您可以为单个目录添加多段限定。但是他们需要保持一定顺序以方便阅读和理解。下面的例子就是一个带有限定的可绘制对象资源目录的全名:
MyApp/
res/
drawable-en-rUS-port-160dpi-finger-keysexposed-qwerty-dpad-480x320/
更具代表性的,您可能需要指定一些资源配置参数。您也许需要除去完整列表中的一些值,但是还有很多很多值被保留在列表中:
MyApp/
res/
drawable-en-rUS-finger/
drawable-port/
drawable-port-160dpi/
drawable-qwerty/
限定词
值
语言
两字节ISO 639-1 低位的语言编码,比如:en, fr, es
区域
两字节ISO 3166-1-alpha-2 带有小写"r"前缀的大写地区编码。如: rUS, rFR, rES
屏幕方向
port, land, square
屏幕像素密度
92dpi, 108dpi, etc.
触摸屏类型
notouch, stylus, finger
用户是否可以使用键盘
keysexposed, keyshidden
默认的文字输入方法
nokeys, qwerty, 12key
默认的非触摸导航方法
notouch, dpad, trackball, wheel
屏幕尺寸
320x240, 640x480, etc. 较大的尺寸必须首先声明。
次列表不包括设备定制的参数,比如信号、商标等。所有应用程序应该知道的信息都需要按照上面的列表信息编码。
这里有一些命名的通用原则:
· 值之间用连接号连接
· 值是大小写敏感的,比如
o 一个指定的drawable目录必须命名为drawable-port,而不是drawable-PORT。
· 每种限定词只能有一种选择,您不能命名目录为drawable-rEN-rFR/。
· 您可以添加多种限定词,但是每个限定词必须在在上面列表中。比如drawable-en-rUS-land表明其用于直板的美式英语设别上。
· 带有限定词的目录不能被嵌套,比如,res/drawable/drawable-en是不允许的。
· 资源引用在语法中表示为未加修饰的表达式,比如 MyApp/res/drawable-port-92dp/myimage.png,在XML中表示为:@drawable/myimage,在代码中表示为:R.drawable.myimage。
Android如何找到最匹配的目录
Android将根据配置文件挑选资源,挑选过程为:
1. 排除所有和配置文件中指定的当前设备参数不匹配的资源。比如,如果屏幕像素密度为108dpi,下面所列出的目录中,只有MyApp/res/drawable-port-92dpi/会被排除。
MyApp/res/drawable/myimage.png
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
MyApp/res/drawable-port-92dpi/myimage.png
2. 接下来系统将根据限定字的多少来筛选。例如,如果您的本地系统识别为en-GB编码的便携设备,随后我们还剩两个目录可以匹配。
MyApp/res/drawable/myimage.png
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
3. 选择机制将根据配置文件中定义的优先级,优先级定义于上面的列表顺序中。
4. MyApp/res/drawable-en/myimage.png
5. MyApp/res/drawable-port/myimage.png
发表评论
-
Android Tween动画之RotateAnimation实现图片不停旋转
2012-11-26 22:38 1111本文主要介绍Android中如何使用rotate实现图片不停旋 ... -
Android实现widget定时更新
2012-11-04 20:20 980在开发Android的widget时,第一个需要解决的问题就是 ... -
来自腾讯、谷歌、百度等名企的精选面试五十题
2012-10-07 23:08 957http://www.apkway.com/thread-90 ... -
Android 中Parcelable的作用
2012-09-24 09:53 902android提供了一种新的类型:Parcel。本类被用作封装 ... -
[Android算法] 【eoeAndroid索引】史上最牛最全android开发知识汇总
2012-09-13 09:33 1171http://www.eoeandroid.com/threa ... -
安卓航班推荐70个具有商业实战性的精品Android源码
2012-08-01 00:00 961http://www.apkway.com/thread-58 ... -
Android测试教程汇总
2012-08-02 14:51 1200http://www.apkway.com/thread-67 ... -
Service 与 Thread 的区别
2012-07-26 00:10 941Service 与 Thread 的区别 很多时候,你可能 ... -
android 使用百度地图画轨迹
2012-07-26 00:08 2681import android.content.Context ... -
android百度地图半径画圆
2012-07-26 00:07 2843Java代码 import android.content ... -
Android下获取开机时间
2012-07-26 00:05 1356我的思路是:程序里注册个广播接收器,接收开机启动的广播,当程序 ... -
android 高仿【优酷】圆盘旋转菜单 的实现
2012-07-26 00:03 1417MyAnimation.java Java代码 pack ... -
android 3D 转盘效果(附源码)
2012-07-25 23:41 1861一个仿3D的转盘效果,有倒影特效,旋转图标还可自动放大缩小。由 ... -
Android Thread
2012-07-23 10:47 1120创建新线程的常用方式: 1. 直接使用Thread创建 ... -
Android 通过手说tts中文语音包实现中文朗读
2012-07-22 17:09 1847Android 通过手说tts中文语音包实现中文朗读 ... -
Android 使用HTTPClient调用Web请求(查询手机号码区域)
2012-07-21 00:33 1299Android通过Apache HttpClient调用网上提 ... -
Android+struts2+JSON方式的手机开发
2012-07-21 00:14 1219http://topmanopensource.iteye.c ... -
android九宫格实现
2012-07-21 00:03 1047android九宫格实现,开始以为很复杂,其实只要知道了如何布 ... -
Android ListView圆角实现
2012-07-20 23:59 1247在android上开发项目,如 ... -
Android 将一个Activity转化为View显示出来
2012-07-19 10:27 2110最近看到好多opengl牛人写了些立方体,卷页之类的华丽的代码 ...
相关推荐
Qt 采用http通信json解析读取天气
岗位晋升360度调查表.doc
合法辞退员工的N种方式.pptx
大模型、Agent、具身智能及人形机器人学习全路径规划.pdf
华润万家员工手册.doc
招聘需求分析.xls
内容概要:本文详细介绍了基于‘光伏(PV)+蓄电池+负载’架构的双有源桥DC-DC变换器仿真方法及其在Matlab 2021b中的具体实现。首先解析了光伏系统的MPPT控制,通过扰动观察法使光伏板始终处于最大功率点。接着讨论了蓄电池的恒流充放电控制,利用PI控制器确保电池的安全和高效运作。然后阐述了双有源桥DC-DC变换器的闭环控制机制,借助PID控制器维持系统输出电压的稳定性。最后,文章展示了如何在Matlab Simulink环境下构建完整的仿真模型,涵盖各模块间的电气连接与信号交互,为新能源系统的优化提供了理论和技术支持。 适合人群:从事电力电子、新能源系统设计的研究人员和工程师,尤其是那些需要深入了解光伏储能系统工作原理的人群。 使用场景及目标:适用于希望掌握光伏储能系统中关键组件如MPPT、恒流充放电控制及双有源桥DC-DC变换器的设计与仿真的技术人员。目标是在实际工程项目中提高系统的效率和可靠性。 其他说明:文中提供的代码片段和建模思路有助于读者更好地理解和实践相关技术,同时也强调了一些常见的陷阱和调试技巧,帮助避免潜在的问题。
线性代数
内容概要:本文详细介绍了不同类型电机的调速方法,重点探讨了直流电机双闭环调速、永磁同步电机电流滞环闭环调速以及异步电机滞环电流调速。文中不仅提供了每种调速方法的基本原理和技术特点,还附带了相应的代码示例进行辅助解释。此外,文章对永磁同步电机的电流滞环调速与SVPWM调速进行了对比,指出了各自的优劣之处。最后,强调了在实际应用中选择合适调速方案的重要性。 适合人群:从事电机控制系统设计与开发的技术人员,尤其是有一定电机控制基础的研发人员。 使用场景及目标:适用于需要深入了解电机调速机制及其应用场景的专业人士。目标是帮助读者掌握不同电机调速方法的特点,以便在实际工程中做出最优选择。 其他说明:文章通过具体的代码实例展示了调速方法的实际应用,使读者能够更好地理解和实践相关技术。同时提醒读者在实际调试过程中要注意参数设置和硬件条件的影响。
人员晋升推荐表.xls
员工生日关怀方案
内容概要:本文详细介绍了对国际知名大厂的三个逆向ADC电路(SAR ADC、Sigma-Delta ADC和Pipeline ADC)进行深入剖析。作者通过Cadence Virtuoso平台研究了这些电路的标准单元库设计,探讨了各个电路的关键技术和实现细节。对于24bit Sigma-Delta ADC,重点讨论了其调制器部分的时钟相位分配和噪声整形技术;对于16bit SAR ADC,则关注其比较器阵列的独特设计以及动态锁存比较器的应用;而对于14bit Pipeline ADC,着重分析了其级间放大器设计和电荷共享技术。此外,文中还提到了在将这些设计适配到自家工艺过程中遇到的问题及其解决方案,如电容寄生效应、时序约束调整、运放结构优化等。 适合人群:从事模拟集成电路设计的专业人士,尤其是对ADC设计感兴趣的工程师和技术研究人员。 使用场景及目标:帮助读者深入了解高精度ADC的工作原理和设计技巧,掌握逆向工程技术在实际项目中的应用,提高对不同工艺节点下ADC设计的理解和适应能力。 其他说明:文中提供了大量具体的代码片段和仿真命令,便于读者理解和实践。同时,作者分享了许多宝贵的经验教训,强调了在逆向工程中需要注意的技术细节和潜在风险。
内容概要:本文详细介绍了大型立体仓库智能物流系统的构建与优化。该项目涉及一万多个库位、一百多台输送机和八台堆垛机,采用了西门子PLC作为控制核心,通过无线网桥与WCS和WMS系统对接。文章重点讲解了梯形图编程和功能块的应用,如输送机启停控制、堆垛机移动控制、路径规划、无线通讯处理以及异常处理机制。此外,还探讨了设备协同、逻辑优化、任务分配算法和速度曲线规划等方面的技术细节。 适合人群:从事工业自动化、智能仓储系统设计与开发的工程师和技术爱好者。 使用场景及目标:适用于智能仓储系统的设计、实施和维护,旨在提高系统的稳定性、效率和可维护性。 其他说明:文中提供了大量实际项目中的代码示例和调试经验,有助于读者理解和应用相关技术。
新员工月工作总结表.xlsx
内容概要:本文详细介绍了基于西门子S7-1500 PLC的汽车电子零件装配线集成解决方案。主要内容涵盖伺服轴控制、阿特拉斯拧紧枪控制、康耐视视觉检测系统以及HMI界面的设计与实现。文中展示了如何利用SCL语言将多种工业设备(如HMI、伺服电机、六轴机器人等)的功能封装为标准化功能块,从而提高系统的模块化程度和可复用性。同时,还分享了一些实际项目中的调试经验和优化技巧,如通过调整加减速曲线避免机械振动、设置扭矩保持时间和视觉检测的防抖定时器等。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是熟悉PLC编程和工业自动化设备集成的专业人士。 使用场景及目标:适用于汽车制造行业的生产线控制系统设计与实施。主要目标是帮助工程师快速掌握如何使用SCL语言构建高效稳定的PLC控制系统,提升生产效率和产品质量。 其他说明:文中不仅提供了详细的代码示例,还结合具体的应用场景进行了深入剖析,有助于读者更好地理解和应用相关技术。此外,强调了模块化编程的优势,如减少重复劳动、便于维护升级等。
内容概要:本文详细介绍了如何在STM32、AT32和GD32等Cortex-M系列MCU上实现串口IAP(In Application Programming)Bootloader,支持远程升级及RS485升级。主要内容涵盖Bootloader的工作原理、内存分配、通信协议设计、Flash写入操作以及跳转应用程序的关键步骤。文中提供了具体的代码示例,如Bootloader主循环、RS485收发控制、Flash写入、CRC校验等,并分享了多个实战经验和注意事项,确保数据传输的可靠性。 适合人群:从事嵌入式系统开发的技术人员,尤其是对STM32、AT32、GD32等国产MCU有一定了解并希望掌握串口IAP技术的研发人员。 使用场景及目标:适用于需要远程升级固件的嵌入式项目,帮助开发者避免现场升级带来的不便,提高设备维护效率。目标是让读者能够独立实现一个可靠的串口IAP Bootloader,掌握RS485通信和Flash编程的关键技术。 其他说明:文中提到的代码和配置已在GitHub上提供,方便读者下载和实践。同时,作者分享了许多实战经验和常见问题解决方案,有助于减少开发过程中可能出现的问题。
线性代数
学生会干部竞选清心简约.pptx
内容概要:本文深入探讨了光伏发电三相并网模型的技术细节,涵盖了光伏板、Boost升压电路、三相并网逆变器、MPPT最大功率点跟踪控制(扰动观察法)、PLL锁相环、dq解耦控制以及电流内环电压外环的并网控制策略。通过Python和Matlab代码片段展示了各个组件的工作原理及其相互协作的方式。实验结果显示,在复杂工况下,该系统能够保持直流母线电压稳定,THD仅为2.72%,并网电流波形优良,证明了其高效性和稳定性。 适用人群:从事电力电子、新能源发电领域的研究人员和技术人员,特别是对光伏发电并网技术感兴趣的读者。 使用场景及目标:适用于研究和开发高效的光伏发电并网系统,旨在提高系统的稳定性和效率,特别是在面对光照强度变化和负载突变的情况下。 其他说明:文中提供的代码片段有助于理解和实现相关控制算法,同时强调了实际应用中的注意事项,如参数选择和调试技巧。
【表格】人事档案信息管理表.xls