Android编程获取屏幕宽高与获取控件宽高的方法
本文实例讲述了Android编程获取屏幕宽高与获取控件宽高的方法。分享给大家供大家参考,具体如下:
获取屏幕宽高
//获取屏幕宽高(方法1) intscreenWidth=getWindowManager().getDefaultDisplay().getWidth();//屏幕宽(像素,如:480px) intscreenHeight=getWindowManager().getDefaultDisplay().getHeight();//屏幕高(像素,如:800p) Log.e(TAG+"getDefaultDisplay","screenWidth="+screenWidth+";screenHeight="+screenHeight); //获取屏幕密度(方法2) DisplayMetricsdm=newDisplayMetrics(); dm=getResources().getDisplayMetrics(); floatdensity=dm.density;//屏幕密度(像素比例:0.75/1.0/1.5/2.0) intdensityDPI=dm.densityDpi;//屏幕密度(每寸像素:120/160/240/320) floatxdpi=dm.xdpi; floatydpi=dm.ydpi; Log.e(TAG+"DisplayMetrics","xdpi="+xdpi+";ydpi="+ydpi); Log.e(TAG+"DisplayMetrics","density="+density+";densityDPI="+densityDPI); screenWidth=dm.widthPixels;//屏幕宽(像素,如:480px) screenHeight=dm.heightPixels;//屏幕高(像素,如:800px) Log.e(TAG+"DisplayMetrics(111)","screenWidth="+screenWidth+";screenHeight="+screenHeight); //获取屏幕密度(方法3) dm=newDisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); density=dm.density;//屏幕密度(像素比例:0.75/1.0/1.5/2.0) densityDPI=dm.densityDpi;//屏幕密度(每寸像素:120/160/240/320) xdpi=dm.xdpi; ydpi=dm.ydpi; Log.e(TAG+"DisplayMetrics","xdpi="+xdpi+";ydpi="+ydpi); Log.e(TAG+"DisplayMetrics","density="+density+";densityDPI="+densityDPI); intscreenWidthDip=dm.widthPixels;//屏幕宽(dip,如:320dip) intscreenHeightDip=dm.heightPixels;//屏幕宽(dip,如:533dip) Log.e(TAG+"DisplayMetrics(222)","screenWidthDip="+screenWidthDip+";screenHeightDip="+screenHeightDip); screenWidth=(int)(dm.widthPixels*density+0.5f);//屏幕宽(px,如:480px) screenHeight=(int)(dm.heightPixels*density+0.5f);//屏幕高(px,如:800px) Log.e(TAG+"DisplayMetrics(222)","screenWidth="+screenWidth+";screenHeight="+screenHeight);
获取控件的宽高
一般来说,我们在onCreate里面得到的控件的宽高全是0.采用下面的方法,可以得到真实的宽高
方法一:
intw=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); inth=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); imageView.measure(w,h); intheight=imageView.getMeasuredHeight(); intwidth=imageView.getMeasuredWidth(); textView.append("\n"+height+","+width);
此方法会加载onMeasure三次
方法二:
ViewTreeObservervto=imageView.getViewTreeObserver(); vto.addOnPreDrawListener(newViewTreeObserver.OnPreDrawListener(){ publicbooleanonPreDraw(){ intheight=imageView.getMeasuredHeight(); intwidth=imageView.getMeasuredWidth(); textView.append("\n"+height+","+width); returntrue; } });
此方法会加载onMeasure二次,但是回调函数会回调很多次
方法三:
ViewTreeObservervto2=imageView.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(newOnGlobalLayoutListener(){ @Override publicvoidonGlobalLayout(){ imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this); textView.append("\n\n"+imageView.getHeight()+","+imageView.getWidth()); } });
此方法会加载onMeasure二次,但是回调函数只回调一次
希望本文所述对大家Android程序设计有所帮助。