这几天公司要做一个电视首页surfaceView预览播放,点击预览窗口全屏播放,由于该项目首页使用hongyang大神的AutoLayout,发现不能动态设置,网上也好少有资料,所以自己就翻了下源码来看看。最后终于解决。
项目中主要动态设置surfaceView的宽和高,和边距用到了WidthAttr()和MarginLeftAttr()等属性,根据项目需要我们可以找到Attr包下对应的属性类去设置,下面是动态设置宽高的代码。
AutoLayoutHelper.AutoLayoutParams layoutParams =
(AutoLayoutHelper.AutoLayoutParams) mSfv_live_home.getLayoutParams();
AutoLayoutInfo autoLayoutInfo = layoutParams.getAutoLayoutInfo();
/**
* 我们这里要给控件设置高度和宽度所以用到了WidthAttr和HeightAttr这两个类,注意下,这类有三个构造
* 参数,第一个就是我们要改的参数,第二个是baseWidth 第三个是baseHeight ,默认给0就行,设置宽度
* 以高度为基准 WidthAttr(300,0,Attrs.Widht);
* 设置高度以宽度为基准 HeightAttr(300,Attrs.Height,0),用到属性类就对应属性值。
*/
autoLayoutInfo.addAttr(new WidthAttr(300, 0, 0));
autoLayoutInfo.addAttr(new HeightAttr(300, 0, 0));
/**
* 这是关键代码,重新为控件设置布局,不然不会刷新控件布局的。
*/
ViewGroup.LayoutParams layoutParamsTwo = mSfv_live_home.getLayoutParams();
mSfv_live_home.setLayoutParams(layoutParamsTwo);
}