在API23之前的RelativeLayout.params getRule

时间:2016-05-22 23:31:35

标签: android

我试图检查RelativeLayout.LayoutParams中的规则,但getRule()仅在API 23中引入,有没有办法在早期版本中执行此操作?

2 个答案:

答案 0 :(得分:6)

有一种更简单的方法可以做到这一点。您无需按照AkashBhave的回答中所述的规则进行循环。

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) rl.getLayoutParams();

可以像这样轻松访问任何规则:

params.getRules()[RelativeLayout.ALIGN_TOP]

对于您的用例(如上文评论中所述),您可以这样做:

if(params.getRules()[RelativeLayout.ALIGN_TOP] == R.id.mView){

}

此外,如果您只是想检查特定规则是否存在:

if(params.getRules()[RelativeLayout.ABOVE] == 0){
   //it does not
} else {
   //it does
}

答案 1 :(得分:-1)

另一种类似于getRule()的方法称为getRules(),它是在API级别1中引入的。该方法的文档位于:https://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html#getRules()。您可以类似地使用此方法。您没有传递任何内容,而是获取一系列受支持的规则,而不是传递int。然后,您可以遍历该规则数组,并将它们与您要查找的规则进行比较。这是一个例子:

int[] rules = relativeLayout.LayoutParams.getRules();
for(int rule : rules) {
    if(rule == rule1 || rule == rule2 || rule == rule3) {
        // Rule exists in RelativeLayout
    } else {
        // Rule doesn't exist
    }
}

希望它有所帮助!