1、.9图片的意义
我们都知道android平台有多种不同的分辨率,很多控件的切图文件在被放大拉伸后,边角会模糊失真。
但是,在android平台下使用点九PNG技术,可以将图片横向和纵向同时进行拉伸,以实现在多分辨率下的完美显示效果。而且使用点九后,仍能保留图像的渐变质感,和圆角的精细度。
从中我们也可以理解为什么叫“点九PNG”,其实相当于把一张png图分成了9个部分(九宫格),分别为4个角,4条边,以及一个中间区域,4个角是不做拉升的,所以还能一直保持圆角的清晰状态,而2条水平边和垂直边分别只做水平和垂直拉伸,所以不会出现边会被拉粗的情况,只有中间用黑线指定的区域做拉伸。结果是图片不会走样。
2、style和theme的作用及用法
style:
style是View中一些属性的集合,包括height,padding,font,color,background等等,Style单独定义在xml文件中,便于修改和重复使用。
style文件需要保存在res/values目录下,文件名任意,但是必须是xml文件,style文件的根标记必须是
Resource
如:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00FF00</item>
<item name="android:typeface">monospace</item>
</style>
</resources>
声明style是CodeFont,对应的是style文件中的style name。mystyle.xml文件中定义了style name是CodeFont:
parent属性表示style之间可以继承,同时可以覆盖parent style的一些属性。
使用:
<TextView
style="@style/CodeFont"
android:text="测试style">
</TextView>
style继承有两种方式:
style的继承可以通过parent属性,用来继承android已经定义好的style,例如:
<style name="GreenText" parent="@android:style/TextAppearance">
<item name="android:textColor">#00FF00</item>
</style>
如果要继承自定义的style,不需要通过parent属性,只要style的name以需要继承的style的name开始后跟新的style的name,中间用“.”隔开。注意:这种方式只适用与自定义的style继承 。
<style name="CodeFont.Red">
<item name="android:textColor">#FF0000</item>
</style>
style也可以多级继承:
<style name="CodeFont.Red.Big">
<item name="android:textSize">30sp</item>
</style>
需要注意,并不是所有的View都支持定义的style的属性,如果自定义的sytle中包含View不支持的属性,程序会自动忽略它。
theme:
如果声明一个style作为Theme,需要配置mainfest文件中 或 的android:theme 属性。
将自定义的style作为application的theme:
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/CodeFont">
android:theme还可以配置android中已经存在的theme:
<activity android:theme="@android:style/Theme.Translucent">
3、dp、sp、px的区别以及转换关系
dp : xml定义的尺寸大小。
sp:xml定义的文字大小。
px:像素,在java文件里使用,= dp * 屏幕分辨率。
4、raw和assets文件夹的作用,二者有何区别
res/raw和assets的相同点:
两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
res/raw和assets的不同点:
1).res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;
assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
读取文件资源:
1).读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作
InputStream is =getResources().openRawResource(R.id.filename);
2).读取assets下的文件资源,通过以下方式获取输入流来进行写操作
AssetManager am = null;
am = getAssets();
InputStream is = am.open("filename");
注意1:Google的Android系统处理Assert有个bug,在AssertManager中不能处理单个超过1MB的文件,不然会报异常,raw没这个限制可以放个4MB的Mp3文件没问题。
注意2:assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml, java 文件被预编译,可以存放一些图片,html,js, css 等文件。
5、Android系统如何在多个资源文件夹下查找匹配最合适的资源
当你需要一个资源文件时,Android系统会在运行时根据当前设备的配置信息从你提供的资源中选择一个文件。