Android 资源文件

应用资源是指应用中与源代码分离的资源, 如图像, 音频文件以及任何与应用的视觉呈现有关的内容. 在 Android 项目中的每一项资源, SDK 构建工具都会定义一个唯一的整形 ID, 可以通过 ID 对资源进行应用. 提供与源代码分离的资源的其中一个最重要优点在于, 您可以提供针对不同设备配置的备用资源.

1, 应用资源分组

项目 res / 目录下支持的资源目录目录资源类型animator/定义属性动画的 xml 文件

anim/定义渐变动画的 XML 文件

color/定义颜色状态列表的 XML 文件

drawable/位图文件(.png、.9.png、.jpg、.gif)

values/包含字符串、整型数和颜色等简单值的 XML 文件。

mipmap/适用于不同启动器图标密度的可绘制对象文件。

layout/用于定义用户界面布局的 XML 文件

menu/用于定义应用菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件。

raw/要以原始形式保存的任意文件,要以原始的 InputStream 打开这些资源

xml/可以在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处

values / 目录下的资源

其他 res/ 子目录中的 xml 资源文件是根据 xml 文件名定义单个资源, 而 values/ 目录中的文件可描述多个资源. 对于此目录中的文件, 元素的每个子元素均定义一个资源. 例如, 元素创建 R.string 资源, 元素创建 R.color 资源.目录资源类型arrays.xml用于资源数组(类型化数组)

color.xml颜色值

dimens.xml尺寸值

string.xml字符串值

styles.xml样式

2, 备用资源

几乎每个应用都应提供备用资源以支持特定的设备配置. 例如, 对于不同的屏幕密度和语言, 应分别包括备用可绘制对象资源和备用字符串资源. 在运行时, Android 会检测当前设备配置并为应用加载合适的资源.

在 res / 中创建一个以 resources_name + config_qualifier 形式命名的新目录.

resources_name: 是相应默认资源的目录名称

qualifier: 是指定要使用这些资源的各个配置的名称

将相应的备用资源保存在此新目录下. 这些资源文件的名称必须与默认资源文件完全一样.

例如 hdpi 限定符表示该目录中的资源适用于屏幕密度较高的设备. 其中每个可绘制对象目录中的图像已经针对特定的屏幕密度调整大小, 但是文件名完全相同. 这样一来用于图像资源的 ID 始终相同, 但是 Android 系统会通过将设备配置信息与资源目录名称中的限定符进行比较, 选择最符合当前设备的各个资源版本. 详细可见官方文档

限定符命名规则

单组资源可以指定多个限定符, 并使用短划线分隔.

不能嵌套备用资源目录.

命名中的值不区分大小写.

对于每种限定符类型, 仅支持一个值.

将备用资源保存到以这些限定符命名的目录中之后, Android 会根据当前设备配置在应用中自动应用这些资源. 每次请求资源时, Android 都会检查备用资源目录是否包含所请求的资源文件, 然后查找最佳匹配资源. 如果没有与特定设备配置匹配的备用资源, 则 Android 会使用相应的默认资源 (一组用于不含配置限定符的特定资源类型的资源).

以下为系统决定使用哪个资源文件夹的逻辑

image

3, 处理运行时变更

有些设备配置可能在运行时发生变化. 此时, Android 系统会重启正在运行的 Activity(先后调用 onDestroy() 和 onCreate() 方法). 重启行为旨在通过利用与新设备配置匹配的备用资源自动重新加载您的应用, 来帮助它适应新配置. 对于 Activity 中数据可以在销毁时通过 onSaveInstanceState() 进行保存, 重启时通过 onRestoreInstanceState() 恢复数据, 但是这样的处理方式成本高昂, 会给用户留下糟糕的使用体验.

在配置变更期间保留对象

如果 Activity 因配置变更而重启, 则可通过保留 Fragment 来减轻重新初始化 Activity 的负担. 此片段可能包含对您要保留的有状态对象的引用.

当 Android 系统因配置变更而关闭 Activity 时, 不会销毁您已标记为要保留的 Activity 的片段. 您可以将此类片段添加到 Activity 以保留有状态的对象.

扩展 Fragment 类并声明对有状态的对象的引用

在创建片段后调用 saveRetainInstance(boolean)

将片段添加到 Activity 中

重启 Activity 后, 使用 FragmentManager 检索片段publicclassRetainedFragmentextendsFragment{

// data object we want to retain

privateMyDataObjectdata;

// this method is only called once for this fragment

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

// retain this fragment

setRetainInstance(true);

}

publicvoidsetData(MyDataObjectdata){

this.data=data;

}

publicMyDataObjectgetData(){

returndata;

}

}

使用 FragmentManager 将片段添加到 Activity. 在运行时配置变更期间再次启动 Activity 时, 您可以获得片段中的数据对象.publicclassMyActivityextendsActivity{

privateRetainedFragmentretainedFragment;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// find the retained fragment on activity restarts

FragmentManagerfm=getFragmentManager();

retainedFragment=(RetainedFragment)fm.findFragmentByTag("data");

// create the fragment and data the first time

if(retainedFragment==null){

// add the fragment

retainedFragment=newRetainedFragment();

fm.beginTransaction().add(retainedFragment,"data").commit();

// load the data from the web

retainedFragment.setData(loadMyData());

}

// the data is available in retainedFragment.getData()

...

}

@Override

publicvoidonDestroy(){

super.onDestroy();

// store the data in the fragment

retainedFragment.setData(collectMyLoadedData());

}

}

自行处理配置更新

如果应用在特定配置变更期间无需更新资源, 并且因性能限制您需要尽量避免重启, 则可声明 Activity 将自行处理配置变更, 这样可以阻止系统重启 Activity. 要声明由 Activity 处理配置变更, 请在清单文件中编辑相应的 元素, 以包含 Android:configChanges 属性以及代表要处理的配置的值. 可以在该属性中声明多个配置值, 通过 "|" 字符分隔这些配置值.

当其中一个配置发生变化时, Activity 不会重启. 而是, Activity 会收到一个对 onConfigrationChanged() 的调用. 这个方法会有一个 Configration 对象的参数指定对新设备的配置, 可以通过对 Configration 中的字段确定新配置. 调用此方法时, Activity 的 Resources 对象会相应地进行更新, 以根据新配置返回资源, 这样, 您就能够在系统不重启 Activity 的情况下轻松重置 UI 的元素.@Override

publicvoidonConfigurationChanged(ConfigurationnewConfig){

super.onConfigurationChanged(newConfig);

// Checks the orientation of the screen

if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){

Toast.makeText(this,"landscape",Toast.LENGTH_SHORT).show();

}elseif(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){

Toast.makeText(this,"portrait",Toast.LENGTH_SHORT).show();

}

}

来源: http://www.jianshu.com/p/a57ba41ff5ff

android h文件是什么文件,Android 资源文件相关推荐

  1. android多语言适配--语言对应的资源文件夹名称

    android多语言适配--语言对应的资源文件夹名称 众所皆知.Android开发中,res资源文件夹下,可以根据不同的文件名后缀(连接符(-)加限定符)来区别不同的资源. android在运行时使用 ...

  2. java资源文件获取属性_Java读写资源文件类Properties

    Java中读写资源文件最重要的类是Properties 1) 资源文件要求如下: 1.properties文件是一个文本文件 2.properties文件的语法有两种,一种是注释,一种属性配置. 注  ...

  3. 【Android Gradle】安卓应用构建流程 ( 资源文件编译 )

    文章目录 一.资源文件编译 二.AndroidManifest.xml 清单文件编译 一.资源文件编译 参考 [Android 安装包优化]资源混淆 ( AAPT2 资源编译工具 | resource ...

  4. Android复习15【动画:创建资源文件夹、创建动画资源文件、组合动画、属性动画、材料设计新特性】

    2020-05-09-[12周-周四] Android动画 https://blog.csdn.net/zhangbijun1230/article/details/80262359 https:// ...

  5. Android工程中R.java文件的重新生成——注意资源文件的错误

    一.如果二或三步骤还是不能生成R.java中内容,一般是XML文件有错,或者xml引用的资源文件找不到,用排除法删除xml后执行二或者三的步骤. 二. 在Android中使用开源代码或者自己开发项目的 ...

  6. 使用Android Studio 查找并删除无用的资源文件(包括drawable里面)

    首先,选中你需要查找的无用文件的文件夹, 比如:需要删除无用xml文件,就先选中"layout"文件夹 然后,点击菜单栏的Analyze,选择Run Ispection by Na ...

  7. android h 游戏下载地址,Android h游戏_如何在Android手机上玩游戏

    最近人们喜欢在手机上玩游戏. 除了一些手机游戏(Android H游戏)之外安卓才可以玩的h,越来越多的朋友开始寻找Android手机游戏. 但是,有些人已经搜索了很长时间,还没有找到合适的游戏来玩. ...

  8. 学习使用资源文件[11] - DLL 中的资源文件

    本例将把一张 bmp 图片, 以资源文件的方式嵌入 dll, 然后再调用. 第一步: 建一个 DLL 工程, 如图: 然后保存, 我这里使用的名称都是默认的. 第二步: 建一个资源原文件, 如图: 编 ...

  9. java资源文件路径_Java 中获取资源(文件)的路径问题总结

    Java 中获取资源(文件)的路径问题总结 首先,Java 中获取资源大体上可分为两种方式,基于 文件系统的 和 基于classpath的. 1. 基于文件系统的相对简单. 比如 构造一个File f ...

  10. android逆向01:修改apk的资源文件,smali插桩

    前提: 有需求才有实现. android逆向能干什么?去除游戏中的广告,跳过各种支付达到付费效果,人为干预简化游戏流程直奔主题,无限增加各种付费道具,等等:当然可以对自己的apk进行逆向的逆向进行加固 ...

最新文章

  1. qlabel 边加载边更新_普及一下什么是超窄边液晶拼接屏
  2. 大型网站技术架构小结
  3. git fock的子项目从上游仓库(源项目)同步更新
  4. 简单使用ansible-playbook
  5. 关于Spring AOP,除了动态代理、CGLIB,你还知道什么?
  6. python代码删掉了几行怎么撤回_仅78行代码实现微信撤回消息查看 | Python itchat
  7. linux dhcp 绑定mac地址,●DHCP协议的功能是 (58) 。在Linux中提供DHCP服务的程序是 (59) ;DHCP服务将主机的MAC地址和IP地 - 赏学吧...
  8. Mysql字符集转换原理剖析及乱码原因
  9. 初识OFDM(七):OFDM中的信道估计
  10. HCIP2------BGP1
  11. Why ASMLIB and why not?
  12. 【openpyxl】插入图表(折线图)
  13. Codeforces C. Destroying Array
  14. R plot图片背景设置为透明_数据科学06 | R语言程序设计模拟和R分析器
  15. 鸿蒙2.0 134个仓库扼要说明
  16. Combining Deep Learning with Information Retrieval to Localize Buggy Files for Bug Reports
  17. 使用shell让其在系统空闲一段时间后自动结束指定进程
  18. Internet of Things(IOTS)and Wireless Sensor Networks Lecture1(WSNS)
  19. OPenCV4-颜色识别(一)调色板和简单的颜色识别
  20. 【总结,持续更新】java常见的线程不安全,你以为的线程安全

热门文章

  1. 视频后期合成软件:nuke12 mac版 v12.2v4最新版(支持big sur)
  2. python绘图练习——股票分析(二):风险分析与蒙特卡罗模拟
  3. 原生android系统小米4,评测小米手机原生系统4.0怎么样
  4. oh my 毕设-人体姿态估计综述
  5. 如何使用 Python 爬取微信公众号文章?
  6. 基于osp平台和Echarts的折线图案例
  7. 智能马桶雷达应用方案,智能雷达感应控制,雷达感应模组技术应用
  8. LTE系统名词解释及上下行过程
  9. 智慧城市建设快速发展 难题颇多亟待解决
  10. 剑指 Offer 46. 把数字翻译成字符串(动态规划+回溯+递归 解法)