1. 程式人生 > >Android螢幕適配3-動態獲取螢幕寬高及動態設定控制元件寬高

Android螢幕適配3-動態獲取螢幕寬高及動態設定控制元件寬高

1、問題

在螢幕適配中,要求應用在不同的螢幕上顯示一樣的效果時,我們的佈局可以採用百分比來定位,也就是 layout_weight,但對於一些層層巢狀或更加複雜的情況下,使用百分比的效果並不是很好,頁無法解決一些問題,比如文字大小。

2、解決思路

我們可以根據螢幕大小重新對佈局以及佈局內的物件大小進行調整。原理類似於我們用播放器看視訊的時候,無論怎麼調整視窗大小,播放器都可以自動調整視訊大小適合視窗大小。因為視訊有一個原始解析度,播放器會根據視窗實際大小對視訊進行縮放

我們寫佈局的時候一般是根據某個基準解析度來(比如 UI 給的原型圖),自動縮放佈局的作用就是將這個基準佈局乘以一個縮放比例,達到適配所有解析度的目的。

計算縮放比例公式:實際大小/設計大小=縮放比例

只需要給定一個設計大小,就可以計算縮放比例,然後將佈局內部所有元素的尺寸都乘以這個縮放比例,就可以適配實際螢幕了。

3、具體步驟

3.1、獲取手機螢幕寬高

DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
// 螢幕寬度(畫素)
int width = metric.widthPixels;  
// 螢幕高度(畫素)   
int height = metric.heightPixels;  
// 螢幕密度(0.75 / 1.0 / 1.5) 
float density = metric.density; // 螢幕密度DPI(120 / 160 / 240) int densityDpi = metric.densityDpi;

3.2、根據螢幕寬度為控制元件設定動態設定寬高

使用 getLayoutParams()setLayoutParams() 方法

LinearLayout ll = (LinearLayout) findViewById(resId);

FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) ll.getLayoutParams
(); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); float scale = dm.density; // 畫素密度 lp.height = (int) (height * scale + 0.5f); lp.width = (int) (width * scale + 0.5f); ll.setLayoutParams(lp);

但是,需要注意的是,在一個低密度的小屏手機上,僅靠上面的程式碼是不能獲取正確的尺寸的。需要在工程的AndroidManifest.xml 檔案中,加入 supports-screens 節點,具體的內容如下:

<supports-screens
            android:smallScreens="true"
            android:normalScreens="true"
            android:largeScreens="true"
            android:resizeable="true"
            android:anyDensity="true" />

文章只是作為個人記錄學習使用,如有不妥之處請指正,謝謝。

參考文章

相關推薦

Android螢幕3-動態獲取螢幕動態設定控制元件

1、問題 在螢幕適配中,要求應用在不同的螢幕上顯示一樣的效果時,我們的佈局可以採用百分比來定位,也就是 layout_weight,但對於一些層層巢狀或更加複雜的情況下,使用百分比的效果並不是很好,頁無法解決一些問題,比如文字大小。 2、解決思路 我們

android螢幕的全攻略3-動態獲取手機螢幕動態設定控制元件

1.獲取手機螢幕寬高: DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenWidth = dm.width

Android螢幕(個人的一點點總結經驗)

前言:做Android已經一段時間了,可是當別人問到我Android中的螢幕適配的時候,感覺自己有一種似懂非懂的感覺,這就有點尷尬了~~哈哈!還有就是ui跑過來問你要切什麼樣子的圖的時候,總要解釋半天,讓別人感覺你好不專業啊,所以為了更好的理解android的螢

獲取螢幕,在程式碼中設定控制元件大小的方法

//獲取螢幕高寬的方法: import android.view.Display; import android.view.WindowManager; WindowManager windowManager = getWindowManager();       

自定義控制元件-----自定義數字鍵盤,了正則表示式的帶輸出字串的控制元件

一、主要的類:CustomAmountInputKeyboard class CustomAmountInputKeyboard constructor(context: Context, attrs: AttributeSet? = null) : LinearLayout(context,

動態設定控制元件

LinearLayout.LayoutParams linearParams =(LinearLayout.LayoutParams) textView.getLayoutParams(); //取控制元件textView當前的佈局引數 linearParams.hei

Android就業面試技巧系列-技術篇3螢幕

Android就業面試技巧系列-技術篇(螢幕適配) 答題技巧 螢幕適配是目前安卓開發大部分程式設計師都會遇到的問題,回答時候,面試官會直接問你對螢幕適配如何看待,此問題需要循序漸進,點滴從經驗作答

Android 自定義相機獲取照片(螢幕

  1.在應用程式中自定義相機拍照的大體步驟如下: 1.檢測和訪問相機:檢測裝置是否支援拍照,然後發出訪問裝置相機請求。        2.建立一個預覽類:建立一個繼承自類SurfaceView和實現介面SurfaceHolder介面的相機預覽類,這個類用來預覽從相機得到

Android螢幕動態設定單個控制元件高比例

前言:這個問題出現在我做平板專案的時候,需要橫排顯示一張圖片以及其他控制元件,如下圖:要求圖、文各佔一半大小,圖片的寬高比例目測是1:2。這種情況不適合把高度寫死,因為iPad的螢幕大小差異有些大,高度寫死圖片hin容易變形,因此我們就需要動態去設定這個圖片的寬高。正題:首先

Android 開發:(九)Android螢幕經驗談

1.名詞解釋 螢幕尺寸: 也就是我們平時所說的某某手機是幾寸屏, 比如HTC one V這款手機是3.7寸的, 這裡的寸說的是英寸(inch),國際上習慣使用的單位,1inch = 2.54cm,3.7寸指的是螢幕的對角線的長度。 螢幕解析度:

Android 螢幕之 dimens

相信做手機端的 App 的小夥伴,只要是產品稍微大一點,就會面臨螢幕適配的問題,對於適配這個問題,網上眾說紛紜,以前雖然有零零散散的看過,但是沒有實踐過,也是在最近遇到這個需求的情況下才研究了一下,現在做個記錄。 1 參考連結 http://blog.csdn.net/qq_341

PhaserJS 3 螢幕時的小坑 -- JavaScript Html5 遊戲開發

  PhaserJS 巨坑:在config內不要把 width 設為 window.innnerWidth在config內不要把 width 設為 window.innnerWidth在config內不要把 width 設為 window.i

Android中dp px sp概念梳理以及如何做到螢幕

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android螢幕詳解

本篇文章將解釋什麼是螢幕適配,為什麼要螢幕適配,螢幕適配的本質,和如何解決螢幕適配上的問題。(小白也能看懂哦) 什麼是螢幕適配?     螢幕適配就是讓某一個元素或者是APP中的UI介面在不同解析度、不同尺寸的螢幕上展示出同樣的顯示效果,這就是螢幕適配。 為什麼要

螢幕——系統升級android 8.0 部分UI出現錯亂——“可用螢幕解析度”

這兩天將自己的mate9從7.0升級到8.0發現一個問題,app的某個ui介面部分錯亂了;因為螢幕適配使用了dimens適配,所以猜測有可能螢幕規格沒有覆蓋到;但是發現mate9的螢幕解析度為1920*1080,查看了dimens檔案是有覆蓋的,為什麼7.0時候沒有問題,升級到8.0出現

dimens-Android非常簡單非常好用的螢幕

為什麼要進行Android螢幕適配? 關於為什麼要進行Android螢幕適配,什麼是dp、dpi這些概念我就不去一一講解了,網上很多文章。這裡我推薦幾篇講的比較好的: Android螢幕適配全攻略(最權威的官方適配指導) Android 螢幕適配:最全面的解決方案 Andr

Android 資原始檔螢幕

一、圖片適配: mipmap-xhdpi:720P,表示1280x720解析度,用於存放2x切圖 mipmap-xxhdpi:1080P,表示1920x1080解析度,用於存放3x切圖 mipmap-xxxhdpi:2K,表示2560x1440解析度,用於存放4x切圖  

Android螢幕使用dimens

關於Android螢幕適配中使用多個dimens的遇到的問題 我相信大家在android開發中,肯定會遇到一個問題,那就是螢幕適配問題,通常我們做app只需要適配各種型別的手機就OK了,最近公司要求把pad上的app適配到手機上,這個有點麻煩,所以著重研究了一下。 基本概念:dp、sp、px

Android-螢幕全攻略(絕對詳細)(二)

Android-螢幕適配全攻略(絕對詳細)(二) 關鍵字:非密度制約畫素(dp、sp) 螢幕適配最佳實踐 前言:這篇文章接著 上一篇 繼續講,上篇講到了螢幕適配的核心概念與單位和一種解決方案:解決方案-支援各種螢幕尺寸。本篇繼續講剩餘的其他兩種解

Android-螢幕全攻略(絕對詳細)

(一) 關鍵字:螢幕適配 px dp dpi sp large限定符 .9.png 2012年到2014年支援Android裝置的種類從3997增長到18796。同時各大廠商定製的螢幕尺寸也非常多。這將非常