Я реализую приложение для 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;
}
}