LayoutParams我們知道寺董,特別是在 RelativeLayout 布局中有很多特殊的屬性壁查,通常在載入布局之前朴乖,在相關(guān)的xml文件中進(jìn)行靜態(tài)設(shè)置即可衩婚。
但是窜护,在有些情況下,我們需要?jiǎng)討B(tài)設(shè)置布局的屬性非春,在不同的條件下設(shè)置不同的布局排列方式柱徙,這時(shí)候就需要用到 RelativeLayout.LayoutParams.addRule() 方法缓屠,該方法有兩種重載方式;
1护侮、addRule(int verb) 用此方法時(shí)敌完,所設(shè)置節(jié)點(diǎn)的屬性不能與其它兄弟節(jié)點(diǎn)相關(guān)聯(lián)或者屬性值為布爾值(布爾值的屬性,設(shè)置時(shí)表示該屬性為 true羊初,不設(shè)置就默認(rèn)為 false)滨溉,比如:addRule(RelativeLayout.CENTER_VERTICAL) 就表示在 RelativeLayout 中的相應(yīng)節(jié)點(diǎn)是垂直居中的。
2长赞、addRule(int verb, int subject) 該方法所設(shè)置節(jié)點(diǎn)的屬性必須關(guān)聯(lián)其它的兄弟節(jié)點(diǎn)或者屬性為布爾值( 屬性為布爾值時(shí)晦攒,anchor 為 RelativeLayout.TRUE 表示 true,anchor 為0表示 false)得哆,比如:addRule(RelativeLayout.ALIGN_LEFT, R.id.date) 就表示 RelativeLayout 中的相應(yīng)節(jié)點(diǎn)放置在一個(gè) id 值為 date 的兄弟節(jié)點(diǎn)的左邊
當(dāng)我們有時(shí)候用 layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START)添加規(guī)則時(shí)脯颜,多次調(diào)用addRule會(huì)出現(xiàn)多種規(guī)則重疊的使用,查看源碼可以看到我們?cè)O(shè)置的規(guī)則會(huì)存儲(chǔ)在數(shù)組int[] mRules = new int[VERB_COUNT]中贩据,為了保證準(zhǔn)確顯示所需要的的規(guī)則栋操,需要在清除數(shù)據(jù)mRlues中的數(shù)據(jù),通過調(diào)用layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_START);來清楚之前的規(guī)則饱亮,就可以達(dá)到需要的效果
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mImageView.getLayoutParams();
layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_END);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
mIvTransBg.setLayoutParams(layoutParams);