Android使用Java代碼動態實現RelativeLayout、LinearLayout佈局

一般情況下,我們一般都在佈局xml文件中直接寫頁面的佈局,但有時需要動態改變佈局,這時就需要我們使用Java代碼來實現了。

改變佈局主要是通過改變LayoutParams來實現的,LayoutParams繼承於Android.View.ViewGroup.LayoutParams。它相當於一個Layout的信息包,封裝了Layout的位置、高、寬等信息。需要注意的是,需要注意到要修改的View的父容器是什麼類型的,FrameLayout,LinearLayout,RelativeLayout等,因爲不同類型的LayoutParams是不同的。

如果一個View其父容器爲RelativeLayout,若想改變其佈局位置,可通過以下代碼實現:

 

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可傳入不同的佈局參數,如addRule(RelativeLayout.BELOW, R.id.XXX); 表示該View位於XXX下面。常用的佈局參數有以下:
layoutParams.alignWithParent = true 如果對應的兄弟元素找不到的話就以父元素做參照物

RelativeLayout.CENTER_HORIZONTAL 在父控件中水平居中

RelativeLayout.CENTER_VERTICAL 在父控件中垂直居中

RelativeLayout.CENTER_IN_PARENT 相對於父控件完全居中 RelativeLayout.ALIGN_PARENT_BOTTOM 緊貼父控件的下邊緣 RelativeLayout.ALIGN_PARENT_TOP 緊貼父控件的上邊緣

RelativeLayout.ALIGN_PARENT_LEFT緊貼父控件的左邊邊緣

RelativeLayout.ALIGN_PARENT_RIGHT 緊貼父控件的右邊緣

RelativeLayout.ABOVE 在某元素的上方 需要第二個參數爲某元素的ID

RelativeLayout.BELOW 在某元素的下方 需要第二個參數爲某元素的ID

RelativeLayout.LEFT_OF 在某元素的左邊 需要第二個參數爲某元素的ID

RelativeLayout.RIGHT_OF 在某元素的右邊 需要第二個參數爲 某元素的ID

RelativeLayout.ALIGN_TOP 本元素的上邊緣和某元素的的上邊緣對齊 需要第二個參數爲某元素的ID

RelativeLayout.ALIGN_BOTTOM 本元素的上邊緣和某元素的的下邊緣對齊 需要第二個參數爲某元素的ID

RelativeLayout.ALIGN_LEFT 本元素的上邊緣和某元素的的左邊緣對齊 需要第二個參數爲某元素的ID

RelativeLayout.ALIGN_RIGHT 本元素的上邊緣和某元素的的右邊緣對齊 需要第二個參數爲某元素的ID

RelativeLayout.ALIGN_BASELINE 本元素的基線和某元素的的基線對齊 需要第二個參數爲某元素的ID

如果一個View其父容器爲LinearLayout,若想改變其佈局位置,可通過以下代碼實現:

 

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"/>

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

同樣,若需增加某個View,可調用addView方法,這裏有一個層次的概念,對於一個ViewGroup,其爲它的所有子元素都標識了一個index,這個index就代表了某個子元素的所在的層次,一個ViewGroup的xml佈局文件中,從上到下的子元素的index依次爲0,1,2······N,例如一個佈局方向爲vertical的LinearLayout,其子元素從上到下的index就依次爲0,1,2······N。若傳入addView的index爲小於0的負數,如-1,則默認index爲N + 1,即加在了LinearLayout的最底部。



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章