Android測量控件常用的方法:

第一種:

直接 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

大神的博客:

鏈接:http://blog.csdn.net/listeners_Gao/article/details/50995162
發佈了26 篇原創文章 · 獲贊 20 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章