此类问题,网上的文章多如牛毛,但是大多数千篇一律,有时候套用网上的代码,并不能实际解决问题。

网上的公式代码:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(

ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

params.setMargins(10,10,10,10);

view.setLayoutParams(params);

代码解读:

获取一个宽高为wrap content的布局参数对象;

给该参数设置左上右下的边距为10;

将该参数设置给View

本菜遇到的问题:

本菜在项目中遇到过一个问题,视频播放器横屏时,播放器右边的按钮,被导航栏NavigationBar给覆盖了,此时的解决方案就是将按钮左移。但是移动的距离无法确定,所以就需要用java代码去设置右边距了。

本人找到了网上的公式代码,并获得了导航栏的高度,最后将按钮的右边距设为导航栏的高度。本以为信心满满的可以交作业了,Run起来看效果,按钮竟然变大了,变大了。

这就奇了怪了,我只是设置边距而已,宽高在xml文件中都已经定好了,怎么会变大?扯断三根头发,搞清楚了,原来是公式代码惹得错。在获取param的时候,使用了wrap content。所以,按钮就变为了图片的原始大小。

正确答案:

LinearLayout.MarginLayoutParams params = (LinearLayout.MarginLayoutParams) view.getLayoutParams();

params.setMargins(0,0,getNavigationBarHeight(activity),0);

view.setLayoutParams(params);

此时,按钮大小恢复了,因为使用了布局中设置的宽高。

总结:

当按钮在xml布局中,且宽高已确定,不需要修改的时候,应该使用view.getLayoutParams()来获取布局参数对象。

当按钮属于用代码新建的,可以套用网上的公式代码。WRAP_CONTENT还是MATCH_PARENT,试需求而定。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐