**ANDROID**应用资源(二)原生资源

>使用原始XML资源


  • 文件路径:
    在/res/xml/路径下创建xml内容。

  • 访问方式:

    • java中package_name.R.xml.file_name
    • @package_name:xml/file_name
  • 获得实际的XML文件的方法

    • XmlResourceParser getXml(int id),使用XMLPullParser来解析该XML文档,该方法返回一个解析器对象(XMLResourceParser是XmlPullParser的子类)
    • InputStream openRawResource(int id)获取xml文档对应的输入流。
  • 使用XML文件
    XmlResourceParser xrp = getResources().getXml(R.xml.books)
    xrp.getName()获取标签名
    xrp.getAttributedValue(null,”price”);根据属性名获取属性值
    xrp.getAttributeVale(1);根据属性的索引来获取属性的值
    xrp.nextText()获取文本内容
    xrp.next()下一个事件

>使用布局文件


参照第二章内容

>使用菜单资源


参照第二章内容

>样式和主题


感觉样式和主题就有点像html中css的作用,负责通过xml定义一系列完整的格式;而普通的java代码,就像网页前端中js脚本,负责完成前端的简单页面逻辑;普通的xml代码就像html代码,负责整体的布局。

  • 样式的含义:相当于多个格式的集合,其他UI组件通过style属性来指定样式。
  • 样式的定义:
    • name:指定样式的名称
    • parent:指定继承的父样式,获得父样式中的所有格式,同时可以覆盖父样式
<resources>  
    <style name="style1">  
        <item name="android:textSize">20sp</item>  
        <item name="android:textColor">#00d</item>  
    </style>  
</resources>  
  • 样式的使用:style = “@package_name:style/file_name”

  • 主题资源:不能作用于单个View组件,主体应该对整个应用中所有的Activity起作用,或对指定的Activity起作用。主要是定义窗口外观的格式。

  • 主题资源的定义方法

<style name="CrazyTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowFrame">@drawable/star</item>
</style>
  • 主题资源的使用方法:
    • java:setTheme(R.style.CrazyTheme);指定单一的Activity应用主题
    • manifest.xml:;对整个工程使用某个主题。
    • xml在单个Activity中使用某个主题

android内置了大量的主题资源

>属性资源


  • 属性资源的定义:

    • attr子元素:定义了一个属性
    • declare-styleable子元素:定义了一个styleable对象,包含了一组attr属性值。
  • 属性资源的使用:

TypedArray typedArray=content.obtaintStyledattributes(attrs,R.styleable.alphaImageView);  
int duration= typedArray.getInt(R.styleable.AlphaImageView_duration,0)
alphaDelta = 255 * SPEED / duration;

>使用原始资源


  • 存放位置:/res/raw/或者/assets/目录下,前者会在R资源清单中生成一个索引项。后者是更彻底的原始资源,android需要通过AssetManager来管理该目录下的原始资源。

  • R清单中的访问方式:@package_name:raw/file_name;或者:package_name.R.raw.file_name;

  • asset中访问方式:
    • InputStream open(String fileName):根据文件名来获取原始资源对应的输入流
    • AssetFileDescriptor openFd(String fileName):根据文件名来获取原始资源对应的AssetFileDescriptor。AssetFileDescriptor代表了一项原始资源的描述,应用程序可以通过AssetFileDescriptor来获取原始资源。

>国际化和资源自适应


  • java实现国际化的方法:
    将标签和提示等信息放在资源文件中,资源文件是键值对,对每个资源文件中的key是不变的,但value随着不同的国家和语言改变。
  • java程序国际化的实现方法:

    • java.util.ResourceBundle:加载一个国家的语言包
    • java.util.Locale:用于封装一个特定的国家区域、语言环境。
    • java.text.MessageFormat:用于格式化带占位符的字符串。
    • baseName_language_country.properties
    • baseName_laguage.properties
    • baseName.properties
  • java支持的国家和语言

  • 程序国际化的具体实现方法:
    • 在不同国家的properties文件中定义大量的键值对,并将两个字节的值进行转换(native2ascii)。
    • 获得当前系统的国家语言环境Locale = Locale.getDefault();
    • 加载制定国家地区的properties文件,将得到的键值对放在bundle中:
      ResourceBundle bundle = ResourceBundle.getBundle(“mess”,myLocale);
    • 取出键值对中的值
      System.out.println(bundle.getString(“hello”));
      其他程序国际化的方法也一样,能够通过(资源-国家-r语言)的方式,来定义不同的国家。

>自适应不同屏幕的资源


  • 屏幕资源:屏幕尺寸,屏幕分辨率、屏幕方向

对dp和dpi的理解
dp出现的原因是android手机屏幕分辨率各不相同同,如果用px像素点来描述,会导致在不同的手机屏幕上效果差异较大。dp的目的是为了封装屏幕的分辨率。对于任何屏幕他的dp都是480dp*320dp,如果分辨率更高,那么,1dp就等于更多的px,如果分辨率更低,1dp就等于更少的px。其中dp和平乡的换算公式,被称为dpi,就是单位dp中含有像素的个数,或者说,单位inch中含有像素点的个数。


事实上dp的工作机制跟上述内容不同,但是为什么采取一种错误的理解方式,因为他们的机制一样,但是结果不一样。


那就应该用学习html中的方法,机制理解起来可能比较简单,重要的是对标签的记忆组合与对审美的要求。而js和android中的java代码则对逻辑要求比较严谨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值