日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 调整屏幕分辩率

發布時間:2023/12/18 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 调整屏幕分辩率 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android 可設置為隨著窗口大小調整縮放比例及設定fixed的窗口大小。
對于surface的控制在SurfaceHolder類中進行
而Android 屏幕分辯率中已經有一個類DisplayMetics提供

Andorid.util 包下的DisplayMetrics 類提供了一種關于顯示的通用信息,如顯示大小,分辨率和字體。

為了獲取DisplayMetrics 成員,首先初始化一個對象如下:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
String str = metrics.toString();
String str = "屏幕分辨率為:" + metrics.widthPixels
??????????????? +" * "+metrics.heightPixels;
??????? textview.setText(str); //顯示
???
在CTS中有如下一段代碼可以體現出不同的單位顯示情況:
??? public void testAccessTextSize() {
??????? DisplayMetrics metrics = mActivity.getResources().getDisplayMetrics();


??????? mTextView = new TextView(mActivity);
??????? mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20f);
??????? assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20f, metrics),
??????????????? mTextView.getTextSize(), 0.01f);


??????? mTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f);
assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20f, metrics),
??????????????? mTextView.getTextSize(), 0.01f);


??????? mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);
??????? assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics),
??????????????? mTextView.getTextSize(), 0.01f);


??????? // setTextSize by default unit "sp"
??????? mTextView.setTextSize(20f);
??????? assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics),
??????????????? mTextView.getTextSize(), 0.01f);


??????? mTextView.setTextSize(200f);
??????? assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 200f, metrics),
??????????????? mTextView.getTextSize(), 0.01f);
??? }
??

這里面有幾個單位dip, dp, px, sp概念必須了解一下先:
dip: device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,
??? 這個和設備硬件有關,一般我們為了支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素。
px: pixels(像素). 不同設備顯示效果相同,一般我們HVGA代表320x480像素,這個用的比較多。
pt: point,是一個標準的長度單位,1pt=1/72英寸,用于印刷業,非常簡單易用;
sp: scaled pixels(放大像素). 主要用于字體顯示best for textsize,根據 google 的建議,
?? TextView 的字號最好使用 sp 做單位
??
程序員通常以像素為單位設計計算機用戶界面,但是如果顯示分辯率發生變更(更高時),
則以前做的應用界面會相應縮小,所以有必要使用與分辨率無關的度量單位解決此問題。

Android支持下列所有單位:
px(像素):屏幕上的點。
in(英寸):長度單位。
mm(毫米):長度單位。
pt(磅):1/72英寸。
dp(與密度無關的像素):一種基于屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp = 1px。
dip:與dp相同,多用于android/ophone示例中。

dp也就是dip。這個和sp基本類似。如果設置表示長度、高度等屬性時可以使用dp或sp。但如果
設置字體,需要使用sp。dp是與密度無關,sp除了與密度無關外,還與scale無關。
所以為了使用戶界面能夠在現在和將來的顯示器類型上正常顯示,建議大家始終使用sp作為
文字大小的單位,將dip作為其他元素的單位。當然,也可以考慮使用矢量圖形,而不是用位圖

附帶兩個問題的解決:
解碼圖片顯示時,設定的density會影響到顯示效果

在DisplayMetrics.java中定義的默認值:
??? /**
???? * Standard quantized DPI for low-density screens.
???? */
??? public static final int DENSITY_LOW = 120;


??? /**
???? * Standard quantized DPI for medium-density screens.
???? */
??? public static final int DENSITY_MEDIUM = 160;


??? /**
???? * Standard quantized DPI for high-density screens.
???? */
??? public static final int DENSITY_HIGH = 240;


??? /**
???? * Standard quantized DPI for extra-high-density screens.
???? */
??? public static final int DENSITY_XHIGH = 320;???
???
??? /**
???? * The reference density used throughout the system.
???? */
??? public static final int DENSITY_DEFAULT = DENSITY_MEDIUM;
???
??? 1、如果圖片解碼像素高但顯示效果不怎么樣時,請修改下DENSITY_DEFAULT看個效果
??? public static final int DENSITY_DEFAULT = DENSITY_XHIGH;
???
??? 顯示例子:
Options opts = new Options();
opts.inScaled = false;
opts.inSampleSize = 1;


opts.inScreenDensity = DisplayMetrics.DENSITY_HIGH;
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
mBitmapbg = BitmapFactory.decodeResource(this.getResources(), R.drawable.bj, opts);
BitmapDrawable bd = new BitmapDrawable(mBitmapbg);
???
??? 2、如果圖片在不同的顯示頻率下被放大了,那么有可能與webview相關,這也是density影響的
???
???? /**
???? * Enum for specifying the WebView's desired density.
???? * FAR makes 100% looking like in 240dpi
???? * MEDIUM makes 100% looking like in 160dpi
???? * CLOSE makes 100% looking like in 120dpi
???? */
??? public enum ZoomDensity {
??????? FAR(150),????? // 240dpi
??????? MEDIUM(100),??? // 160dpi
??????? CLOSE(75);???? // 120dpi
??????? ZoomDensity(int size) {
??????????? value = size;
??????? }
??????? int value;
??? }
???
??? 那么是否可能根據屏幕的分辯率進行動態設定呢?
??? int dDensity = getResources().getDisplayMetrics().densityDpi ;
??? WebSettings.ZoomDensity zDensity = WebSettings.ZoomDensity.MEDIUM ;
??? switch(dDensity) {
??? case DisplayMetrics.DENSITY_LOW :?
??? zDensity = WebSettings.ZoomDensity.CLOSE;
??? break;
??? case DisplayMetrics.DENSITY_MEDIUM:
??? zDensity = WebSettings.ZoomDensity.MEDIUM;
??? break;
??? case DisplayMetrics.DENSITY_HIGH:
??? zDensity = WebSettings.ZoomDensity.FAR;?
??? break ;
??? }
??? webSettings.setDefaultZoom(zDensity);

?

轉載于:https://www.cnblogs.com/snake-hand/p/3151370.html

總結

以上是生活随笔為你收集整理的Android 调整屏幕分辩率的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。