一、LinearLayout、RelativeLayout的重要属性
布局不同,相近的功能所用的属性也不尽相同
二、设置背景色问题
在图片focus、click时需要图片变换,我们可能经常会用到selector。
平常的ImageView获焦状态可用android:state_focused="true"表示。GridView获焦可用android:state_selected="true"表示。点击事件都为android:state_pressed="true"。
ImageView与ImageButton的引用含selector的xml文件也略有不同。 ImageView不管是用src或background的方式引用都需添加clickable="true"或focusable="true"属性,而ImageButton用src或background的方式引用都无需添加。
三、设置大图片背景优化
public void setBackground(){
LinearLayout appLayout = (LinearLayout)findViewById(R.id.allAppLayout);
InputStream is = this.getResources().openRawResource(R.drawable.app);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 2; //width,hight设为原来的二分一
rawBitmap =BitmapFactory.decodeStream(is,null,options);
bitDrawable = new BitmapDrawable(getResources(), rawBitmap);
appLayout.setBackground(bitDrawable);
}
此法先将图片压缩为二分之一,损失像素,然后再填充屏幕。四、android布局优化
1.推荐使用的布局
使用量
2. android布局原则
(1)尽量多使用LinearLayout和RelativeLayout,不要使用AbsoluteLayout
(2)在布局层次一样的情况下,建议使用LinearLayout代替RelativeLayout,因为LinearLayout性能要稍高一点。
(3)将可复用的组件抽取出来并通过include标签使用
(4)使用ViewStub标签来加载一些不常用的布局
ViewStub标签同include标签一样可以用来引入一个外部布局,不同的是,ViewStub引入的布局默认不会扩张,既不会占用显示也不会占用位置,从而在解析Layout时节省cpu和内存。可人为控制合适把外部布局加载进来,如一般是隐藏的,当点击某个按钮显示。
(5)使用merge标签减少布局的嵌套层次
场景一:布局根节点是FrameLayout且不需要设置background或padding等属性,可用merge代替。
场景二:某布局作为子布局被其他布局include时,使用merge当作该布局的定节点,这样在被引用时顶节点会被自动忽略。