【Android学习笔记】应用资源(二)原生资源

文章介绍了Android中如何使用XML资源,包括在/res/xml/下的访问方式,以及通过Java代码的解析。此外,提到了布局文件、菜单资源的使用。样式和主题类似于HTML的CSS,定义UI组件的格式,而属性资源用于定义自定义视图的特性。文章还讨论了国际化和根据不同屏幕尺寸、分辨率进行资源自适应的方法,强调了dp作为度量单位在不同屏幕间保持视觉一致性的角色。
摘要由CSDN通过智能技术生成

>使用原始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>

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 样式的使用: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>

  • 1

  • 2

  • 3

  • 4

  • 5

  • 主题资源的使用方法:

    • 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;

  • 1

  • 2

  • 3

>使用原始资源

  • 存放位置:/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代码则对逻辑要求比较严谨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mDeepLearning4205

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值