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

标签 android android-layout android-relativelayout

我正在尝试复制 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/

相关文章:

Android: ScrollView 中的相对布局

android - FaSTLane 将参数传递给插件

android - 在嵌套在 fragment 中的 AdapterView.OnItemClickListener(){} 中传递 Activity 上下文 - 该方法未定义

java - Android中的泄漏窗口异常

java - 渲染前如何获取textview的行数?

android - setBackgroundColor(int color)和RelativeLayout

android - 实现 Day View/Schedule Android UI 的最佳方式

android - 无法在 Samsung 4.0.4 设备上启动应用程序

android - 隐藏工具栏时无法启用 webview 的滚动行为

java - 兄弟位置改变时如何刷新android View 高度?