android获取屏幕宽高与获取控件宽高(三种方法)
1.获取屏幕宽高
方法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);
2.获取控件的宽高,一般来说,我们在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二次,但是回调函数只回调一次
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!