Как решить круговые зависимости не могут существовать в RelativeLayout программно? - PullRequest
0 голосов
/ 25 февраля 2019

Я реализую приложение для Android, которое поддерживает альбомный и портретный режимы без использования ландшафтного режима.Это как фальшивый вид на пейзаж в портретном режиме.Для обратного ландшафтного режима мне нужно изменить положение видов справа налево, а слева вид интерфейса - справа.Я попытался удалить правила LayoutParam, он работал нормально, если представление ссылается на родительский RelativeLayout, например RelativeLayout.ALIGN_PARENT_LEFT, но если представление ссылается на второе представление, например RelativeLayout.RIGHT_OF, LEFT_OF, оно выдает ошибку,

IllegalStateException: Circular dependencies cannot exist in RelativeLayout

Как программно удалить круговую ссылку?

private void removeLayoutParamsRules(View view, LayoutRule... rules){
    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams();
    for (int i=0; i<rules.length; i++){
        lp.removeRule(rules[i].getVerb());
    }
    view.setLayoutParams(lp);
}

private void addRules(View view, LayoutRule... rules)throws IllegalStateException{
    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams();
    if (rules!=null){
        for (LayoutRule rule:rules){
            if (rule.getSubject()!=-1){
                lp.addRule(rule.getVerb(), rule.getSubject());
            }else {
                lp.addRule(rule.getVerb());
            }
        }
    }
    view.setLayoutParams(lp);
}

public class LayoutRule {
@Getter @Setter
int verb;
@Getter @Setter
int subject = -1;
public LayoutRule(int verb, int subject){
    this.verb = verb;
    this.subject = subject;
}

}

...