国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android獲取屏幕寬高與獲取控件寬高(三種方法)

2019-12-12 03:29:20
字體:
來源:轉載
供稿:網友

1.獲取屏幕寬高

方法1:

int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕寬(像素,如:480px) int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // 屏幕高(像素,如:800p) Log.e(TAG + " getDefaultDisplay", "screenWidth=" + screenWidth + "; screenHeight=" + screenHeight); 

方法2:

DisplayMetrics dm = new DisplayMetrics(); dm = getResources().getDisplayMetrics(); float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0) int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320) float xdpi = dm.xdpi; float ydpi = 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 = new DisplayMetrics(); 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); int screenWidthDip = dm.widthPixels; // 屏幕寬(dip,如:320dip) int screenHeightDip = 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.采用下面的方法,可以得到真實的寬高

方法一 :

int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); imageView.measure(w, h); int height =imageView.getMeasuredHeight(); int width =imageView.getMeasuredWidth(); textView.append("/n"+height+","+width); 

此方法會加載onMeasure三次

方法二 :

ViewTreeObserver vto = imageView.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {   public boolean onPreDraw() {     int height = imageView.getMeasuredHeight();     int width = imageView.getMeasuredWidth();     textView.append("/n"+height+","+width);     return true;   } }); 

此方法會加載onMeasure二次,但是回調函數會回調很多次

方法三:

ViewTreeObserver vto2 = imageView.getViewTreeObserver();  vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {    @Override     public void onGlobalLayout() {     imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);      textView.append("/n/n"+imageView.getHeight()+","+imageView.getWidth());   }  }); 

此方法會加載onMeasure二次,但是回調函數只回調一次  

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辽源市| 柯坪县| 博湖县| 罗田县| 黑山县| 南陵县| 灵寿县| 平顺县| 开封市| 改则县| 神池县| 湖南省| 宜昌市| 银川市| 灌云县| 吕梁市| 佳木斯市| 花莲县| 航空| 南部县| 保山市| 南阳市| 什邡市| 普兰店市| 运城市| 潞西市| 宝应县| 嵊州市| 横山县| 阿鲁科尔沁旗| 宣城市| 法库县| 洛南县| 台山市| 曲麻莱县| 巴南区| 策勒县| 湖州市| 江口县| 新竹县| 温泉县|