Android应用开发—LayoutParams的用法
Android應(yīng)用開發(fā)—TextView的動態(tài)創(chuàng)建 這篇文章講到了“TextView控件布局位置的控制”,主要依賴于RelativeLayout.LayoutParams的使用,本文簡單介紹下LayoutParams的用法
注:本文大部分內(nèi)容參考android,利用layoutParams代碼動態(tài)布局空間位置和總結(jié):代碼中添加LinearLayout和RelativeLayout布局 或者是一份copy,之所以這里重新“寫”一遍,主要是那篇文章的樣式布局,實在有點不太好看。
LayoutParams介紹:
LayoutParams繼承于Android.View.ViewGroup.LayoutParams。LayoutParams相當(dāng)于一個Layout的信息包,它封裝了Layout的位置、高、寬等信息。假設(shè)在屏幕上一塊區(qū)域是由一個Layout占領(lǐng)的,如果將一個View添加到一個Layout中,最好告訴Layout用戶期望的布局方式,也就是將一個認(rèn)可的layoutParams傳遞進(jìn)去。
可以這樣去形容LayoutParams,在象棋的棋盤上,每個棋子都占據(jù)一個位置,也就是每個棋子都有一個位置的信息,如這個棋子在4行4列,這里的“4行4列”就是棋子的LayoutParams。
但LayoutParams類也只是簡單的描述了寬高,寬和高都可以設(shè)置成三種值:
- 一個確定的值。
- MATCH_PARENT,即填滿(和父容器一樣大小)。
- WRAP_CONTENT,即包裹住組件就好。
上面的代碼其實是子對父的,也就是說,父布局下的子控件要設(shè)置這句話。
因為布局很多,雖然都繼承至ViewGroup但是各個布局還是有很大的不同。
很顯然上面這句應(yīng)該這樣寫才算準(zhǔn)確:
這表示這個子控件的父布局是一個TableRow, 這樣的LayoutParams 太多,所以應(yīng)明確指明。
下面分別說下兩個常用到布局:
- FrameLayout下動態(tài)設(shè)置子控件居中,動態(tài)用JAVA代碼要這樣實現(xiàn):
- RelativeLayout下動態(tài)設(shè)置子控件居中:
在ANDROID 開發(fā)中,有時候我們需要在后臺動態(tài)添加布局文件,這里我們來說一下后臺添加LinerLayout布局和RelativeLayout文件的方式:
LinearLayout 布局:
線性布局,組件以垂直或水平方向線性排列。 android.widget.LinearLayout有個繼承自android.view.ViewGroup.LayoutParams 的內(nèi)嵌類LayoutParams,使用這個類的實例調(diào)用 LinearLayout.addView 就可以實現(xiàn)“線性布局”。
首先我們需要定義一個LinearLayout的布局參數(shù)params,如下:
- 方式一:指定高、寬
- 方式二:指定高、寬、權(quán)重,其中LayoutParams中的兩個參數(shù)分別為:子控件的高、寬。
設(shè)置控件相對于容器本身的位置:
LinearLayout.LayoutParams.gravity = Gravity.NO_GRAVITY/Gravity.TOP/Gravity.BOTTOM/Gravity.LEFT/Gravity.RIGHTRelativeLayout布局:
RelativeLayout布局,是以“相對”位置/對齊為基礎(chǔ)的布局方式。android.widget.RelativeLayout 有個繼承自android.view.ViewGroup.LayoutParams 的內(nèi)嵌類 LayoutParams,使用這個類的實例調(diào)用 RelativeLayout.addView 就可以實現(xiàn)“相對布局”。
首先我們需要定義一個 RelativeLayout的布局參數(shù)relLayoutParams,如下:
RelativeLayout.LayoutParams relLayoutParams=new RelativeLayout.LayoutParam(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)其中LayoutParams中兩個參數(shù)分別為:子控件的寬(width),子控件的高(height),除了可以為LayoutParams.FILL_PARENT(android.view.ViewGroup.LayoutParams)等系統(tǒng)常量外還可以是數(shù)值,比如400。
- 通過LayoutParams的 addRule方法來額外的添加別的規(guī)則:
其中 anchor 參數(shù)指定可以是 View 的 id(“相對于誰”)。RelativeLayout.TRUE(啟用某種對齊方式)或者是-1(應(yīng)用于某些不需要 anchor 的 verb)[因為 RelativeLayout.TRUE的值為 -1 ,所以-1或者RelativeLayout.TRUE都是可以是 0 (不啟用這個規(guī)則)
其中 verb 參數(shù)指定相對的“動作”:
1. 如果是相對于父控件的相對布局的話 anchor 參數(shù)可以不用或者設(shè)置為-1或者RelativeLayout.TRUE。
2. 如果是相對于級別和自己同一級的控件的話參數(shù)設(shè)置應(yīng)該是 view 的id。
3. 如果參數(shù)設(shè)置為 0 的話,則表示這個規(guī)則不會運用到該控件的布局中,當(dāng)是相對于本身的父控件的時候這個參數(shù)可以省略。
eg:
RelativeLayout的相關(guān)變量:
relLayoutParams.alignWithParent=true 如果對應(yīng)的兄弟元素找不到的話就以父元素做參照物 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 在某元素的上方 需要第二個參數(shù)為某元素的ID RelativeLayout.BELOW 在某元素的下方 需要第二個參數(shù)為 某元素的ID RelativeLayout.LEFT_OF 在某元素的左邊 需要第二個參數(shù)為某元素的ID RelativeLayout.RIGHT_OF 在某元素的右邊 需要第二個參數(shù)為 某元素的ID RelativeLayout.ALIGN_TOP 本元素的上邊緣和某元素的的上邊緣對齊 需要第二個參數(shù)為某元素的ID RelativeLayout.ALIGN_BOTTOM 本元素的上邊緣和某元素的的下邊緣對齊 需要第二個參數(shù)為某元素的ID RelativeLayout.ALIGN_LEFT 本元素的上邊緣和某元素的的左邊緣對齊 需要第二個參數(shù)為某元素的ID RelativeLayout.ALIGN_RIGHT 本元素的上邊緣和某元素的的右邊緣對齊 需要第二個參數(shù)為某元素的ID RelativeLayout.ALIGN_BASELINE 本元素的基線和某元素的的基線對齊 需要第二個參數(shù)為某元素的ID總結(jié)
以上是生活随笔為你收集整理的Android应用开发—LayoutParams的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程中的启发规则
- 下一篇: Iot相关杂烩