How do I programmatically remove an existing rule that was defined in XML?

前端 未结 3 1445
刺人心
刺人心 2020-12-01 07:03

I have a linear layout that is contained inside a relative layout. It is set in the XML file to be to the right of another linear layout (this works fine). In some cases I

相关标签:
3条回答
  • 2020-12-01 07:35

    add the following code to your existing code

    linearLayoutToMove.setLayoutParams(layoutParams)

    I think this should do the job. In case if the above line dont work, try to call linearLayoutToMove.invalidate() after the above line.

    0 讨论(0)
  • 2020-12-01 07:37

    You can't remove a rule because all rules are always stored in a fixed-size java array. But you can set a rule to 0. For example

    layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
    layoutParams.addRule(RelativeLayout.BELOW, R.id.new_ref_LinearLayout);
    

    EDIT (thanks to Roger Rapid):

    As of API level 17, the class RelativeLayout.LayoutParams has the following method:

    public void removeRule(int verb) 
    

    So you can remove a rule using the following line of code:

    layoutParams.removeRule(RelativeLayout.RIGHT_OF);
    

    And you will get exactly the same result as when 'adding' a zero-rule as:

    layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
    
    0 讨论(0)
  • 2020-12-01 07:54

    I think you need to call:

    relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);

    after changing the LayoutParams.

    In reply to the edit, you can create new LayoutParameters using:

    LinearLayout.LayoutParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.FILL_PARENT,
        LinearLayout.LayoutParams.FILL_PARENT);

    and then add your new rules. Then, update the layout parameters using the previously mentioned updateViewLayout() method.

    0 讨论(0)
提交回复
热议问题