一、layoutParams方法
在Android中,LayoutParams是一個重要的類,通常由ViewGroup的子類使用。LayoutParams是一個子類,它定義了子View在布局文件中的尺寸、位置和邊距等信息。一般而言,我們在使用Layout時,必須對特定的View創建一個LayoutParams實例,並將其附加到父布局中。
Layout中常見的LayoutParams分別如下:
LayoutParams |- LinearLayout.LayoutParams |- RelativeLayout.LayoutParams |- FrameLayout.LayoutParams |- ...
這些LayoutParams子類都擁有多個構造函數,以滿足不同的需求,其具體使用方式可以查閱官網文檔。
二、layoutParams類型2006
LayoutParams中的type屬性可以指定八種類型之一,默認為0,type屬性的不同值代表不同的布局效果。
LayoutParams.TYPE_SYSTEM_ALERT代表這是一個全局系統級彈窗的LayoutParams,只有在TYPE_TOAST之前才可以使用。它需要權限 android.permission.SYSTEM_ALERT_WINDOW,不然在調用layParams的時候會拋java.lang.SecurityException異常。
三、layoutParams參數
LayoutParams中的參數除了上述的type屬性以外,還有其他常見的參數。
1、width和height代表View的寬和高,可以設為以下值:
WRAP_CONTENT 長和寬為內容的大小, 即根據應用實際內容計算得出 MATCH_PARENT 長和寬充滿父控件 固定值 長和寬為固定的數值
2、gravity表示子視圖與父視圖之間的在x、y軸上的對齊方式,如:center|center_vertical
3、weight屬性是LinearLayout的重點,它指定了子視圖所佔用的空間比重,一般設為1,當調整布局時,子視圖按照權重平分剩餘空間。
四、layoutParams.flag
LayoutParam中的flag是一個位運算標記,可以設置LayoutParams的樣式、行為和標誌。該標誌只能由LayoutParams的創建者使用,程序員不能直接設置。當然,使用父View里的addView()函數創建LayoutParams對象,也會自動創建一個默認的LayoutParam對象。
一些常見的標誌有:
FLAG_FORCE_LAYOUT 強制父視圖調用requestLayout()函數 FLAG_LAYOUT_IN_SCREEN 子控制在屏幕上佔據空間的時候使子控制在屏幕上對齊父控件 FLAG_LAYOUT_NO_LIMITS 子控制不會限制在視圖容器之內的布局屬性
五、layoutParams.type
在LayoutParams中,type即為layoutParams.type,可以指定當前LayoutParams的類型,在不同類型下會表現出不同的布局效果。
幾個常見的布局類型有:
ABSOLUTE 指定控件的絕對位置, 忽略左右高低的繪製規則 FILL_PARENT 當前控件充滿父控件 MATCH_PARENT 當前控件內容和容器(父控件)內容一樣大小 WRAP_CONTENT 根據內容自適應控件大小
六、layoutParams flags
LayoutParams中的flags屬性,用於定義LayoutParams的表現。flags屬性是一個int類型的標誌,可以組合使用,表示LayoutParams的效果。
常見的屬性有:
LAYOUT_FLAG_NO_BACKGROUND 不要繪製ViewGroup的背景 LAYOUT_FLAG_CLIP_TO_PADDING 在ViewGroup中顯示視窗內的內容而不是全部,通俗地說,就是在繪製背景時是否經過padding LAYOUT_FLAG_CLIP_CHILDREN 標記是否對子視圖進行修剪和是否避免在子視圖之外進行繪畫
七、layoutParams overlay
LayoutParams中的overlay是一個布爾值,用於指定窗口的overlay屬性。如果為true,則表示該view是在其他的視圖之上進行渲染;否則,該視圖在所有其他非覆蓋視圖後面進行渲染。
八、layoutParams match_parent
一般在父控件中間,我們會讓一個子視圖填滿父控件,這時我們就需要使用match_parent屬性。該屬性需要在子視圖LayoutParam的width或height使用,如果都使用會覆蓋寬和高的尺寸,比如:
九、layoutParams設置margin單位
LayoutParam中的margin是為了讓視圖之間產生間隔,由於視圖之間的間隔有時需要按像素值控制,因此需要LayoutParam支持按像素值設置margin。
在LayoutParam繼承類(如FrameLayout.LayoutParams)中,同時支持按比例設置margin和按像素數值設置margin。
LayoutParams lp = new FrameLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); int margin = 20;//20px lp.setMargins(margin, margin, margin, margin); view.setLayoutParams(lp);
十、LayoutParams type=2002、2003
LayoutParams中的Type分為八種,這其中有兩種是能被我們使用的,分別為Type 2002和Type 2003。他們分別是MATCH_CONSTRAINT和MATCH_CONSTRAINT_SPREAD,是約束布局中使用的,是ConstraintLayout的布局。
Type 2002 即為MATCH_CONSTRAINT,與Match、Fixed、Wrap三個屬性類似,同時又不同於他們。Type 2003,即MATCH_CONSTRAINT_SPREAD,與Type 2002類似,但是同時地,它又能夠擴展,即在一定程度上,該屬性能夠與其他控件進行融合。
基本的使用方式會根據不同的控件,有些細節會略有不同,如果需要請引用官方文檔進行更詳細地學習。
十一、結語
本文對Android中LayoutParams進行了詳細的剖析,包括類型、參數、flag、overlay、match_parent,margin單位、以及MATCH_CONSTRAINT和MATCH_CONSTRAINT_SPREAD。LayoutParams是布局的基礎知識之一,在掌握LayoutParams後,能夠讓我們更加靈活地應對開發過程中的布局問題。
原創文章,作者:HTXU,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/147927.html