Android Resource 提供资源(2)

为了独立维护如图片和字符串资源,应该将资源从代码中独立出来。也可以提供可选资源为专门设别配置,通过文件目录名称区分。在运行时候,安卓会根据配置使用合适的资源。例如你想提供不同的UI布局和语言根据屏幕尺寸和语言设置情况。
一旦提供外部资源应用信息,你可以通过资源IDs获得到。IDs在项目中R类中。

资源类分组

将资源文件放入res/目录子目录中,例如下面简单文件层分类情况
MyProject/
    src/
        MyActivity.java
    res/
        drawable/
            icon.png
        layout/
            main.xml
            info.xml
        values/
            strings.xml

- 资源文件名称很重要,表情况如下:
1 .animator/ :xml文件 属性动画
2. anim/ :xml文件 补间动画
3. color/ :xml文件定义 a state list of colors
4. drawable/:Bitmaps(.png,.9.png,jpg,gif)或者是
被编译到xml文件中下列子类型:
Bitmap files
Nine-Patches(re-sizable bitmaps)
State lists
Shapes
Animation drables
5.layout/ :xml 文件用于用户交互布局
6.menu/ :xml 文件定义应用菜单,Options Menu,Context Menu,or Sub Menu
7.raw/ :任意文件格式保存原生格式。打开这些资源用Inputstream,调用Resources.openRawResources(),用resourceID,R.id.filename。但是要获得与原始文件名称和文件类,应当将文件放入assets/目录。文件在assets/目录中没有给资源ID,所以要读取这些文件只有通过AssetManager.
8.values/ :xml文件,包含数值strings,intergers and colors.
然而xml子软文件在其他res/子目录中定义单独资源根据xml文件名,文件在values/目录中描述不同的资源。例如文件在这个values/目录中,每个<-resources->元素定义一种资源《string》中用R.string 资源。
由于每个资源定义自己的xml元素,可义命名文件你想要放置不同资源,但是为了清楚,应该放置独立的资源在不同的文件中。
arrarys.xml–>typed arrarys
colors.xml—->color values
dimens.xml—>dimension values
string.xml—–>string values
styles.xml——>styles
9.xml/ :任意的xml文件,在运行的时候调用Resources.getXML()读取。多种xml配置文件保存在这里,搜索配置。
不能直接将文件放在res/目中下,可能导致编译错误

提供可选资源文件

几乎所有应用都提供可选资源,满足专门的设备。例如,应当提供可悬挂drawable文件满足不同的屏幕密度和可选的字符串类型针对不同的语言。在运行的时候,Android侦测当前设备配置,为应用加载合适资源。

建立可选的资源集
1. 在res/目录下建立目录,格式:《resource_name》-《config_qualifier》。
2. 在新目录中保存各自可选资源。资源文件必须和默认文件名称一致。

res/
    drawable/
        icon.png
        background.png
 drawable-hdpi/
    icon.png
    background.png
MCC和MNC(mobile country code and mobile network code)
    1.mcc310
    2.mcc310-mnc004
    3.mcc208-mnc00
Language and region
    1.en
    2.fr
    3.en-rUS
Layout Direction
    1.ldrtl(layout direction right to left)
        res/
        layout/
        main.xml(Default layout)
    layout-ar/
        main.xml(Specific layout for Arabic)
    layout-ldrtl/
        main.xml(Any "right to left" language,except for Arabic,because the "ar" language qualifier has a higher precedence),为了支持right to left 特点设置supprotRtl为true
2.ldltr
smallestWidth
sw<N>dp
1.sw320dp
Avaliable width
w<N>dp
w720dp
Avaliable height
h<N>dp
h720dp
Screen size
small
normal
large
xlarge
Screen aspect(方向 方面)
long:long screens 
notlong:not long screens
Screen orientation
port
land
Night mode
night
notnight
Screen pixel density 
ldpi
mdpi
hdpi
xhdpi
nodpi
tvdpi
Touchscreen type
notouch
finger
Keyboard avaliablility
keysexposed
keyshidden
keyssoft
primary text input method
nokeys
qwerty
12key

组合名称规则

1.drawable-en-rUS-land
2.组合必须是在table2中的顺序 drawable-port-hdpi/
3.可选择不能多重目录,如:drawable/drawable-en/(错误)
4.数值是不区分大小的。资源编译器在处理之前将目录名称转换成小写,避免在大小写敏感文件系统产生错误。所有的大写的好处方便阅读。
5.对每个种类只有一种资源支持.drawable-rES-rFR/(错误),drawable-rES和drawable-rFR/(正确).但是,你也不需要复制在两个不同位置文件内容相同的文件,可以通过创建资源文件的别名(alias)
创建别名(alias)资源
当资源文件使用不止一个设备配置时候(但是不想提供为默认资源),不需要将相同文件放入不容的目录中。只需要你创建可选择资源在作为别名文件并且把资源文件保存在默认的资源目录中。注意:animation,menu,raw和在xml/目录中,不提供这种机制。

 假如,两个地方,English-Candian 和French-Candian都用到相同的版本的icon.png.你可能想将相同文件放入不同的目录,但不是这样的。而是,将图片文件保存为icon_ca.png(任意名字,除了icon.png),将他保存在res/drawable/目录中。然后创建icon.xml文件在res/drawable-en-rCA和res/drawable-fr-rCA,用《bitmap》元素映射到icon_ca.png。这就只保存一个png文件用两个xml文件指向它。
drawable
创建一个已经存在图片的别名,用<bitmap>标签
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android ="http://schemas.android.com/apk/res/android"
android:src="@drawable/icon_ca"/>
使用R.drawable.icon--->实际指向了R.drawable.icon_ca
Layout
创建已经存在layout的别名文件,<include>元素,包含在<merge>中
<?xml version="1.0" encoding="utf-8"?>
<merge>
    <include layout="@layout/main_ltr"/>
</merge>
如果你保存的是main.xml调用R.layout.main-->实际指向R.layout.main_ltr资源
Strings 和其他简单的资源
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
</resources>
其他简单的资源文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="yellow">#f00</color>
    <color name="highlight">@color/red</color>
</resources>

提供设备最合适的资源

为了你的设备能够支持多种设备配置,对你的应用的每种资源提供默认资源非常重要的。
例如,你的应用支持多种语言,通常在values/目录中,没有language和region qualifier。如果你去防止所有的字符串在那些有后缀的目录中,那么当运行在你不支持语言设备中将会挂掉。但是只要你提供了默认的values/资源,那么将会很好的运行(即使用户不懂该语言,也比挂掉强)。
同样,如果你提供不同的方向的资源文件,你应该提供一个作为默认的方向。例如,不用layout-land/和layout-port/,应当选择一个默认方向如layout/和layout-port/。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值