第一種:
直接 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