背景:优化前播放视频的UI是直接用XML文件描述,这样确实方便调试和绘图。
但是如果不是动态添加surafaceview到activity的话,dumpsys sufaceFlinger会发现有一层activity的view一直存在。
但是如果我们是动态增加view到activity的话,播放视频的时候只会显示surfaceview,从而达到功耗优化的目的。
动态增加view的话,主要使用了以下重要的接口:
(1)LayoutInflater类,用起来其实和findVIewById配合很多。
主要有两个view的初始化
前者,LayoutInflater + findViewById
后者,setContentView + findViewById
最明显的区别是,前者是直接使用R.layout.XXX来找到实例目标所在的XML文件,而后者则是通过setContentView(R.layout.XXX);
所以前者比较灵活,在程序中想到就用;但是后者一般只能初始化一次。
初始化LayoutInflater的方法有三种,直接拿来主义:
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或
LayoutInflater inflater = LayoutInflater.from(Activity.this);或
LayoutInflater inflater = getLayoutInflater();
使用则是inflater.inflate(R.layout.XXX,null).findViewById(R.id.XXX);
(2)addView的两个方法
addView
public void addView(View child,
int width,
int height)Adds a child view with this ViewGroup's default layout parameters and the specified width and height.
参数:
child - the child view to add