android动态居中布局,Android动态添加布局的两种方式
釋放雙眼,帶上耳機(jī),聽(tīng)聽(tīng)看~!
前言
大多數(shù)時(shí)候我們布局都是用xml來(lái)布局的,但有些時(shí)候也是會(huì)用到動(dòng)態(tài)布局的,尤其是在一些大項(xiàng)目中,動(dòng)態(tài)布局更是體現(xiàn)的淋漓盡致。
所以今天我們就來(lái)學(xué)習(xí)一些動(dòng)態(tài)加添布局的兩種方式,分別是
動(dòng)態(tài)添加xml布局
另外寫(xiě)一個(gè)xml布局,然后通過(guò)java的方式讓他加載他主布局上
動(dòng)態(tài)添加java布局
通過(guò)java寫(xiě)出一個(gè)布局,然后再通過(guò)java的方式讓他加載他主布局上
一、動(dòng)態(tài)添加xml布局
步驟
第一步構(gòu)造容器
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
第二步構(gòu)造xml文件
這里我們就主布局添加個(gè)button就可以了,用來(lái)點(diǎn)擊加載xml布局,被添加布局里面我就寫(xiě)一個(gè)TextView,由于比較簡(jiǎn)單這里就不貼了
第三步構(gòu)造LayoutInflater
提到addview,首先要了解一下LayoutInflater類(lèi)。這個(gè)類(lèi)最主要的功能就是實(shí)現(xiàn)將xml表述的layout轉(zhuǎn)化為View的功能。為了便于理解,我們可以將它與findViewById()作一比較,二者都是實(shí)例化某一對(duì)象,不同的是findViewById()是找xml布局文件下的具體widget控件實(shí)例化,而LayoutInflater找res/layout/下的xml布局文件來(lái)實(shí)例化的。
而LayoutInflater有三種方式
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或
LayoutInflater inflater = LayoutInflater.from(Activity.this);或
LayoutInflater inflater = getLayoutInflater();
這三種方法本質(zhì)是相同的。
第四步inflate()加載布局
用LayoutInflater.inflate() 將LayOut文件轉(zhuǎn)化成VIew。
View view = inflater.inflate(R.layout.block_gym_album_list_item, null);
this.addContentView(view,lp);
關(guān)于第一步顯示布局的詳細(xì)介紹
改變布局主要是通過(guò)改變LayoutParams來(lái)實(shí)現(xiàn)的,LayoutParams繼承于Android.View.ViewGroup.LayoutParams。它相當(dāng)于一個(gè)Layout的信息包,封裝了Layout的位置、高、寬等信息。需要注意的是,需要注意到要修改的View的父容器是什么類(lèi)型的,FrameLayout,LinearLayout,RelativeLayout等,因?yàn)椴煌?lèi)型的LayoutParams是不同的。
上述代碼與以下xml布局代碼作用相同:
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
二、動(dòng)態(tài)添加java布局
我們這里還是以TextView為例,其實(shí)動(dòng)態(tài)添加java布局和xml布局有異曲同工之處,無(wú)非就是用java的方式寫(xiě)出控件,然后添加進(jìn)布局里
第一步構(gòu)造容器
和上面xml布局的一樣,所以這里就不貼了
第二步構(gòu)造控件布局框架
其實(shí)和xml的第二步也是一樣的,只不過(guò)xml已經(jīng)寫(xiě)好了最外層的布局,所以我們也要用java寫(xiě)出一個(gè)布局,好在里面放控件
LinearLayout view = new LinearLayout(this);
view.setLayoutParams(lp);//設(shè)置布局參數(shù)
view.setOrientation(LinearLayout.HORIZONTAL);// 設(shè)置子View的Linearlayout// 為垂直方向布局
//定義子View中兩個(gè)元素的布局
ViewGroup.LayoutParams vlp = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
第三步添加控件
其實(shí)這一步也沒(méi)有什么好講的,就是xml添加控件的方式改成java添加
TextView tv1 = new TextView(this);
tv1.setLayoutParams(vlp);//設(shè)置TextView的布局
tv1.setText("姓名:");
第四部將控件添加至容器
view.addView(tv1);//將TextView 添加到子View 中
總結(jié)
以上是生活随笔為你收集整理的android动态居中布局,Android动态添加布局的两种方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 咸阳高考成绩查询2021,2021咸阳市
- 下一篇: android 如何使用aar,Andr