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