布局不同,相近的功能所用的属性也不尽相同
在图片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); }此法先将图片压缩为二分之一,损失像素,然后再填充屏幕。
使用量
(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当作该布局的定节点,这样在被引用时顶节点会被自动忽略。