我正在尝试复制 RelativeLayout.LayoutParams
,我需要新的 Params 与旧的完全一样。所以考虑这个方法:
private RelativeLayout.LayoutParams copyParams(RelativeLayout.LayoutParams source){
RelativeLayout.LayoutParams copy = new RelativeLayout.LayoutParams((RelativeLayout.LayoutParams)source);
return copy;
}
现在,一切正常,但它只能在 API 级别 19 以上编译,正如 eclipse 方便地告诉我的那样。
为了在 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()
方法(或任何等效方法),但我可以看到 addRule ()
RelativeLayout.LayoutParams
方法。考虑到 source.getRules()
返回一个数组,我想我可以遍历它并将每个规则添加到我的新 LayoutParams,但感觉我做错了。有没有一种合理的方法来复制这些规则?
TL;DR:在 API 19 之前,有没有办法批量复制 RelativeLayout.LayoutParams 的规则,如果没有,复制它们的最不疯狂的方法是什么?
最佳答案
好吧,如果克隆不起作用,那么您最后的选择可能是一个很好的老式 for 循环呃。
使用 getRules()
获取当前 LayoutParams
中的规则列表,使用 addRule(int, int)
将它们添加到新
LayoutParam.
旧答案:
在这种情况下,我会尝试 .clone
。
LayoutParams
通常是非常简单的对象,只有几个整数,所以 .clone
应该能很好地处理它。
原答案:
尝试:
RelativeLayout.LayoutParams copy = new RelativeLayout.LayoutParams((ViewGroup.LayoutParams)source);
具有 ViewGroup.LayoutParams 的构造函数自 API 1 以来就存在。
ps.: 尽管我知道它会编译,但我强烈建议您仔细检查所有参数是否已正确复制(不仅仅是高度 n 边距)
关于android - 复制API 19之前RelativeLayout.LayoutParams的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23675383/