Android - 用Java代码设置View的边距
2019-04-28 本文已影响0人
xlq
此类问题,网上的文章多如牛毛,但是大多数千篇一律,有时候套用网上的代码,并不能实际解决问题。
网上的公式代码:
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,试需求而定。