Files
notes_estom/Android/应用资源(二)原生资源.md
yinkanglong_lab 07485a7f54 Android&PHP
2021-03-09 19:48:29 +08:00

5.8 KiB
Raw Blame History

>使用原始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代码则对逻辑要求比较严谨。