Android測量控制項常用的方法

2021-07-24 06:49:07 字數 1756 閱讀 8592

第一種:

直接 view.getwidth,getheight; 但是在oncreate()中得到的都是0,因為還沒準備好。但可以在以後的方法中獲得寬高值。

linearlayout.layoutparams linearparams =(linearlayout.layoutparams) textview.getlayoutparams(); //取控制項textview當前的布局引數 linearparams.height = 20;// 控制項的高強制設成20  

linearparams.width = 30;// 控制項的寬強制設成30

textview.setlayoutparams(linearparams); //使設定好的布局引數應用到控制項

第二種:

int w = view.measurespec.makemeasurespec(0, view.measurespec.unspecified);

int h = view.measurespec.makemeasurespec(0, view.measurespec.unspecified);

view.measure(w, h);

view.getmeasuredwidth(); // 獲取寬度

view.getmeasuredheight(); // 獲取高度

還可以通過下面的方法獲取測量的模式和測量的大小:

int specmode = measurespec.getmode(widthmeasurespec);

int specsize = measurespec.getsize(widthmeasurespec);

上面方法的第二個引數:mode共有三種情況,取值分別為:

measurespec.unspecified,measurespec.exactly,measurespec.at_most

measurespec.exactly

是精確尺寸,當我們將控制項的layout_width或layout_height指定為具體數值時如

andorid:layout_width="50dip",或者為fill_parent是,都是控制項大小已經確定的情況,都是精確尺寸。

measurespec.at_most

是最大尺寸,當控制項的layout_width或layout_height指定為wrap_content時,控制項大小一般隨著控制項的子空間或內容進行變化,此時控制項尺寸只要不超過父控制項允許的最大尺寸即可。因此,此時的mode是at_most,size給出了父控制項允許的最大尺寸。

measurespec.unspecified

是未指定尺寸,這種情況不多,一般都是父控制項是adapterview,通過measure方法傳入的模式。

常用的測量方法:

測量螢幕大小:

getwindowmanager().getdefaultdisplay().getmetrics(dm);

int width = dm.widthpixels;

int height = dm.heightpixels;

測量狀態列高度(頂部有電量欄):

rect frame = new rect();  

getwindow().getdecorview().getwindowvisibledisplayframe(frame);  

int statusbarheight = frame.top; 

大神的部落格:

Android常用的控制項

常用控制項例項介紹 幫助你更快的入門android 1 android初級控制項的使用 textview控制項的使用 button控制項的使用方法 edittext控制項的使用方法 imageview的使用方法 radiobutton的使用方法 checkbox的使用方法 menu的使用方法 2 a...

android常用控制項

一.textview 屬性 1.android text 設定文字框的文字內容 3.android singleline 為true文字框不會換行 已過時 4.android lines 預設佔幾行 5.android minlines 最少佔幾行 6.android textcolor 字型顏色 ...

Android常用控制項

toast 吐絲框 是android中的一種簡易的訊息提示框 scaletype 縮放型別 scaletype的屬性值有 matrix fitxy fitstart fitcenter fitend center centercrop centerinside 用得最多還是fitxy fitstar...