ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-复制API 19之前的RelativeLayout.LayoutParams规则

2019-10-29 14:23:59  阅读:243  来源: 互联网

标签:android-layout relativelayout android


我正在尝试复制RelativeLayout.LayoutParams,并且我需要新的Params来完全像旧的一样.因此,请考虑以下方法:

private RelativeLayout.LayoutParams copyParams(RelativeLayout.LayoutParams source){
    RelativeLayout.LayoutParams copy = new RelativeLayout.LayoutParams((RelativeLayout.LayoutParams)source);
    return copy;
}

现在,这可以正常工作,但是只能在Eclipse 19以上的API级别19以上编译.
为了使此工作在API-19之前完成,我尝试了以下操作:

private RelativeLayout.LayoutParams copyParams(RelativeLayout.LayoutParams source){
    RelativeLayout.LayoutParams copy = new RelativeLayout.LayoutParams((ViewGroup.LayoutParams)source);
    copy.setMargins(source.leftMargin, source.topMargin, source.rightMargin, source.bottomMargin);
    return copy;
}

通过强制转换为ViewGroup.LayoutParams,我可以强制使用ViewGroup.LayoutParams CopyConstructor.它很容易获得,但是只会复制高度和宽度.因此,我需要自己转移边距,这在示例2的第3行中进行.但是,这仍然在源布局中遗漏了规则,例如RelativeLayout.BELOW.

我在文档的任何地方都找不到copyRules()或setRules()方法(或任何等效方法),但是我可以看到RelativeLayout.LayoutParams的addRule()方法.考虑到source.getRules()返回一个数组,我认为我可以循环遍历并将每个规则添加到我的新LayoutParams中,但这感觉像是我做错了.有没有复制这些规则的明智方法?

TL; DR:在API 19之前,有没有一种方法可以复制批发的RelativeLayout.LayoutParams规则,如果没有,那么复制它们的最疯狂的方法是什么?

解决方法:

这是我复制带有所有规则的RelativeLayout.LayoutParams的操作:

@NonNull
private static RelativeLayout.LayoutParams copy(ViewGroup.LayoutParams viewLayoutParamsToCopy) {
    RelativeLayout.LayoutParams copiedParams = new RelativeLayout.LayoutParams(viewLayoutParamsToCopy);
    if (viewLayoutParamsToCopy instanceof RelativeLayout.LayoutParams) {
        RelativeLayout.LayoutParams relativeLayoutParamsToCopy = (RelativeLayout.LayoutParams) viewLayoutParamsToCopy;
        int[] rulesToCopy = relativeLayoutParamsToCopy.getRules();
        for (int verb = 0; verb < rulesToCopy.length; verb++) {
            int subject = rulesToCopy[verb];
            copiedParams.addRule(verb, subject);
        }
    }
    return copiedParams;
}

为了使其工作,我必须仔细阅读getRules()方法的文档:

Retrieves a complete list of all supported rules, where the index is the rule verb, and the element value is the value specified, or “false” if it was never set.

标签:android-layout,relativelayout,android
来源: https://codeday.me/bug/20191029/1960847.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有