博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
getLayoutParams()和setLayoutParams()方法源码
阅读量:5169 次
发布时间:2019-06-13

本文共 2022 字,大约阅读时间需要 6 分钟。

今天在写侧滑菜单的时候发现了这个一个问题,初始化的时候在onCreate函数里面设置menu的leftMargin:

menulParams = (LayoutParams) menu.getLayoutParams();menulParams.width = menuWidth;menulParams.leftMargin = -1*menuWidth;content.getLayoutParams().width = screenWidth;
无需调用setLayoutParams函数就可以实现效果,我的解释就是通过getLayoutParams函数得到了LayoutParams的引用,然后修改这个值肯定是会生效的,然而在触摸事件中,我也如法炮制,但是却始终划不出来。

Log.i("debug", "show");//显示菜单menulParams.leftMargin = 0;

为什么在onCreate中设置参数的时候get出来设置一下就可以,现在却不可以了呢?于是决定查看一下源代码是怎么回事:

/**     * Get the LayoutParams associated with this view. All views should have     * layout parameters. These supply parameters to the parent of this     * view specifying how it should be arranged. There are many subclasses of     * ViewGroup.LayoutParams, and these correspond to the different subclasses     * of ViewGroup that are responsible for arranging their children.     * @return The LayoutParams associated with this view     */    @ViewDebug.ExportedProperty(deepExport = true, prefix = "layout_")    public ViewGroup.LayoutParams getLayoutParams() {        return mLayoutParams;    }    /**     * Set the layout parameters associated with this view. These supply     * parameters to the parent of this view specifying how it should be     * arranged. There are many subclasses of ViewGroup.LayoutParams, and these     * correspond to the different subclasses of ViewGroup that are responsible     * for arranging their children.     *     * @param params the layout parameters for this view     */    public void setLayoutParams(ViewGroup.LayoutParams params) {        if (params == null) {            throw new NullPointerException("params == null");        }        mLayoutParams = params;        requestLayout();    }
可以看出:getLayoutParams就是将布局参数的引用返回来,在setLayoutParams函数中除了将布局的形参赋值,还有调用了requestLayout()

恍然大悟,设置参数后是需要对View进行重绘的。在onCreate里面的代码执行的时候View还没有绘制,所以设置完参数后接下来绘制就会生效,而后来的布局参数的改变必须自己调用使View进行重新绘制,所以需要调用setLayoutParams函数!

为了验证,我们不调用setLayoutParams函数,添加上同样OK。

menu.requestLayout();
同样OK。

转载于:https://www.cnblogs.com/qhyuan1992/p/5385342.html

你可能感兴趣的文章
spring security退出方法
查看>>
从获得字符串中获取数字
查看>>
传入一个月份获取该月的统计信息
查看>>
分组取出值最大的数据
查看>>
java判断为空的方法
查看>>
double类型的数值转为小数点2位
查看>>
java比较两个时间年月份的大小
查看>>
服务器上配置JDK
查看>>
java后台生成APP和H5所需要支付宝订单
查看>>
接口传递的json后台如何获得值
查看>>
分页工具的使用
查看>>
如何在Linux启动jar 包
查看>>
微信支付java后台
查看>>
小明买了一箱鸡蛋,假设有n个,可以一天吃1个,也可以一天吃2个,请问有多 少种方法可以吃完?...
查看>>
BigDecimal浮点精度加减乘除运算
查看>>
使用表的id+随机数做不重复的订单号
查看>>
SpringMVC 、Struts2之间的区别
查看>>
根据一个单词找所有的兄弟单词的思想如何处理
查看>>
servlet的监听器、过滤器、拦截器的区别
查看>>
mybatis与hibernate区别
查看>>