美文网首页
Android - 用Java代码设置View的边距

Android - 用Java代码设置View的边距

作者: xlq | 来源:发表于2019-04-28 16:08 被阅读0次

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

    网上的公式代码:
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    params.setMargins(10,10,10,10);
    view.setLayoutParams(params);
    
    代码解读:
    1. 获取一个宽高为wrap content的布局参数对象;
    2. 给该参数设置左上右下的边距为10;
    3. 将该参数设置给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);
    

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

    总结:

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

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

    相关文章

      网友评论

          本文标题:Android - 用Java代码设置View的边距

          本文链接:https://www.haomeiwen.com/subject/etzdnqtx.html