Android使用Java代碼動(dòng)態(tài)實(shí)現(xiàn)RelativeLayout、LinearLayout布局

一般情況下,我們一般都在布局xml文件中直接寫頁(yè)面的布局,但有時(shí)需要?jiǎng)討B(tài)改變布局,這時(shí)就需要我們使用Java代碼來實(shí)現(xiàn)了。

改變布局主要是通過改變LayoutParams來實(shí)現(xiàn)的,LayoutParams繼承于Android.View.ViewGroup.LayoutParams。它相當(dāng)于一個(gè)Layout的信息包,封裝了Layout的位置、高、寬等信息。需要注意的是,需要注意到要修改的View的父容器是什么類型的,F(xiàn)rameLayout,LinearLayout,RelativeLayout等,因?yàn)椴煌愋偷腖ayoutParams是不同的。

如果一個(gè)View其父容器為RelativeLayout,若想改變其布局位置,可通過以下代碼實(shí)現(xiàn):

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
View.setLayoutParams(layoutParams);

上述代碼與以下xml布局代碼作用相同:

<View
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"/>

addRule可傳入不同的布局參數(shù),如addRule(RelativeLayout.BELOW, R.id.XXX); 表示該View位于XXX下面。常用的布局參數(shù)有以下:
layoutParams.alignWithParent = true 如果對(duì)應(yīng)的兄弟元素找不到的話就以父元素做參照物 RelativeLayout.CENTER_HORIZONTAL 在父控件中水平居中 RelativeLayout.CENTER_VERTICAL 在父控件中垂直居中 RelativeLayout.CENTER_IN_PARENT 相對(duì)于父控件完全居中 RelativeLayout.ALIGN_PARENT_BOTTOM 緊貼父控件的下邊緣 RelativeLayout.ALIGN_PARENT_TOP 緊貼父控件的上邊緣 RelativeLayout.ALIGN_PARENT_LEFT緊貼父控件的左邊邊緣 RelativeLayout.ALIGN_PARENT_RIGHT 緊貼父控件的右邊緣 RelativeLayout.ABOVE 在某元素的上方 需要第二個(gè)參數(shù)為某元素的ID RelativeLayout.BELOW 在某元素的下方 需要第二個(gè)參數(shù)為某元素的ID RelativeLayout.LEFT_OF 在某元素的左邊 需要第二個(gè)參數(shù)為某元素的ID RelativeLayout.RIGHT_OF 在某元素的右邊 需要第二個(gè)參數(shù)為 某元素的ID RelativeLayout.ALIGN_TOP 本元素的上邊緣和某元素的的上邊緣對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID RelativeLayout.ALIGN_BOTTOM 本元素的上邊緣和某元素的的下邊緣對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID RelativeLayout.ALIGN_LEFT 本元素的上邊緣和某元素的的左邊緣對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID RelativeLayout.ALIGN_RIGHT 本元素的上邊緣和某元素的的右邊緣對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID RelativeLayout.ALIGN_BASELINE 本元素的基線和某元素的的基線對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID

如果一個(gè)View其父容器為L(zhǎng)inearLayout,若想改變其布局位置,可通過以下代碼實(shí)現(xiàn):

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
View.setLayoutParams(layoutParams);

上述代碼與以下xml布局代碼作用相同:

<View
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"/>

若一個(gè)RelativeLayout或LinearLayout要移除其包含的某個(gè)子元素,只需調(diào)用removeView(View view)方法即可。

同樣,若需增加某個(gè)View,可調(diào)用addView方法,這里有一個(gè)層次的概念,對(duì)于一個(gè)ViewGroup,其為它的所有子元素都標(biāo)識(shí)了一個(gè)index,這個(gè)index就代表了某個(gè)子元素的所在的層次,一個(gè)ViewGroup的xml布局文件中,從上到下的子元素的index依次為0,1,2······N,例如一個(gè)布局方向?yàn)関ertical的LinearLayout,其子元素從上到下的index就依次為0,1,2······N。若傳入addView的index為小于0的負(fù)數(shù),如-1,則默認(rèn)index為N + 1,即加在了LinearLayout的最底部。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,008評(píng)論 25 709
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,325評(píng)論 0 17
  • 歡迎Follow我的GitHub, 關(guān)注我的CSDN. 其余參考Android目錄. 轉(zhuǎn)載請(qǐng)注明出處:http:/...
    passiontim閱讀 4,939評(píng)論 0 31
  • Android功能強(qiáng)大,界面華麗,但是眾多的布局屬性就害苦了開發(fā)者,下面這篇文章結(jié)合了網(wǎng)上不少資料.第一類:屬性值...
    HangChen閱讀 5,186評(píng)論 0 24
  • 小兒稚氣愛學(xué)語(yǔ), 到家舉書教?hào)|西; 騎馬行車槍棍舞, 也愛紅裝美兮兮。
    天宇無緣閱讀 229評(píng)論 0 0

友情鏈接更多精彩內(nèi)容