这是一个系列,我们将其命名为工具箱,如果你还没有看之前的文章:

Android工具箱之Context解析

Android工具箱之文件目录

Android工具箱之组织你的代码文件

Android工具箱之Activity生命周期

Android工具箱之迁移到AppCompat

Android工具箱之Android 6.0权限管理

概要

在Android开发中,几乎所有的事情就是资源,而定义资源是你在开发Android应用时,最重要的一环。

资源被用在很多地方,例如定义颜色,字符串,图片,布局,菜单等,这样定义的好处就是不再进行硬编码。所有的东西都需要定义在你的资源文件中,然后其被app中的Java代码所引用。最简单且最常用的资源是Strings资源。

资源的分类

下列是Android中常用的资源:

  • Property动画 文件夹:animator 详情:xml文件定义Property动画

  • Tween动画 文件夹:anim 详情:xml文件定义Tween动画

  • Drawables 文件夹:drawable 详情:bitmap文件或者xml文件

  • Layout 文件夹:layout 详情:用来定义用户界面的xml文件

  • Menu 文件夹:menu 详情:用来定义action bar或者菜单

  • Values 文件夹:values 详情:用来定义strings或者dimens等的xml

完整的,你可以参照Providing a Resource guide。

定义String资源

对于你的应用的每个文本(比如按钮的文本,或者textview的文本等),你应该首先在res/values/strings.xml文件中定义你的文本。每一个文本都是一对键值对,举个例子,如果你想让你的按钮展示Submit文本,那么你需要在strings.xml文件中:

<?xml version="1.0" encoding="utf-8"?>    Hello!    Submit

现在如果我引用了资源文件submit_label,其对应的值Submit就会展现。最后,你可以创建多个资源文件针对不同的国家和地区,或者不同的设备。

引用资源

现在我们定义了我们自己的字符串资源,我们可以随时随地的访问它,不论在Java代码或者布局文件中。例如,在布局文件中,我们简单的使用@来引用它。

在你的Java代码中访问资源文件,你需要使用getResources.getString方法或者getString方法来通过其资源id获取其对应的值。

String submitText = getResources().getString(R.string.submit_label);

相同的方法也适用于图片或者颜色的获取, getResources()方法返回资源对象,该对象可以获取所有的资源,而每个资源对应一个单独的文件夹。

动态获取资源

在一些例子中,你可能想动态的获取资源。举个栗子:

public String getStringValue(String key) {    // Retrieve the resource id    String packageName = getBaseContext().getPackageName();    Resources resources = getBaseContext().getResources();    int stringId = resources.getIdentifier(key, "string", packageName);    if (stringId == 0) { return null; }    // Return the string value based on the res id    return resources.getString(stringId);}

现在你可以直接获取资源啦:

public String myKey = "submit_label"; // Maps to R.string.submit_labelpublic String myStringValue = getStringValue(myKey); // Returns string text

同样的id也可这么做:

// getViewById("tvTest");public View getViewById(String id) {    // Retrieve the resource id    String packageName = getBaseContext().getPackageName();    Resources resources = getBaseContext().getResources();    int viewId = resources.getIdentifier(id, "id", packageName);    if (viewId == 0) { return null; }    // Return the string value based on the res id    return findViewById(viewId);}

提供可选择的资源

多样的设计

为了构建杰出的UI设计,Android开发者需要能够让自己的app更加广泛的使用在不同的设备上。要这么做,我们首先需要安装屏幕大小区分,app必须为不同的屏幕设置不同的资源文件。

可选择的资源

资源的强大之处在于其可选择性,基于屏幕大小,分辨率,语言等,通常的资源选择有:

  • 针对手机和平板的不同布局文件。

  • 针对不同语言的string资源。

  • 针对不同屏幕分辨率的drawable资源。

  • 针对不同平台版本的style资源。

  • 针对不同屏幕方向的布局文件。

针对不同的选择不同的资源文件,我们需要为其创建不同的文件夹,举个栗子,当涉及多个屏幕的时候,我们提供多个图片,那么对应的文件夹应该是res/drawable-hdpi, res/drawable-xhdpi,和res/drawable-xxhdpi,系统会根据手机的分辨率自动选择使用哪一张图片,对应的文件树:

res/    drawable/           icon.png        background.png        drawable-hdpi/          icon.png        background.png

理解修饰符

Android提供了多个修饰符,你可以针对一个文件夹添加多个修饰符。通常情况下:

语言区分:

  • 语言区分:en, fr 语言选择

  • 屏幕大小:sw480dp,sw600dp 屏幕的最小高度或者宽度

  • 屏幕方向:port, land 屏幕处于竖直或者横屏状态

  • 屏幕分辨率:hdpi, xhdpi 屏幕分辨率用于选择不同图片

  • 平台版本号:v7, v11, v21 平台版本通常用于styles

drawable-en-sw600dp-land 用于英语平板横屏模式。

可选择的布局文件

通常可选择的资源被用来针对不同设备,而布局文件也可有修饰符。举个栗子:

res/    layout/           activity_main.xml        item_photo.xml        layout-sw600dp/         activity_main.xml    layout-sw600dp-land/        activity_main.xml     layout-sw720dp/         activity_main.xml        item_photo.xml        

通常来讲,手机在sw240和sw480之间。7寸平板为sw600,10寸为sw720。

布局最佳实践

下列为如何确保你的app能够在不同屏幕上展现良好:

  • 避免硬编码在你的代码里。

  • 尽量使用RelativeLayout和不要使用AbsoluteLayout。

  • 使用wrap_content和match_parent或者dp。

  • 在需要的适合提供可选择的布局和图片

参考

http://developer.android.com/guide/topics/resources/string-resource.html
http://developer.android.com/guide/topics/resources/accessing-resources.html
http://mobile.tutsplus.com/tutorials/android/android-string/
http://developer.android.com/guide/topics/resources/providing-resources.html
http://developer.android.com/training/multiscreen/screendensities.html
http://www.evoketechnologies.com/blog/effective-ui-design-tips-android-devices/

更多相关文章

  1. android 文件读取
  2. android 自定义控件全系列导航
  3. [Android UI] listview 自定义style
  4. Android xml资源文件中@、@android:type、@*、?、@+的含义和区别
  5. android 布局文件详解
  6. android支持的media文件格式--MediaFile
  7. Android xml资源文件中@、@android:type、@*、?、@+含义和区别
  8. Android 资源文件中@、@android:type、@*、?、@+含义和区别
  9. Android 网站资源收集大全

随机推荐

  1. Android键盘使用问题汇总
  2. Android(安卓)学习笔记(一)
  3. android应用安全——数据安全
  4. opengl
  5. Android(安卓)JNI原理分析
  6. 初探Android
  7. 【Android(安卓)界面效果19】Android中sh
  8. 编写自定义的 Android(安卓)Preference
  9. 使用Android(安卓)SwipeRefreshLayout了
  10. Android工程引入第三方jar包