1. 程式人生 > >android螢幕適配的全攻略3-動態獲取手機螢幕寬高及動態設定控制元件寬高

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

1.獲取手機螢幕寬高:

DisplayMetrics  dm = new DisplayMetrics();     
   
getWindowManager().getDefaultDisplay().getMetrics(dm);     
   
int screenWidth = dm.widthPixels;               
   
int screenHeight = dm.heightPixels;

22.根據螢幕寬度為控制元件設定動態設定寬高:

imageView.setImageResource(R.drawable.newscar);
LayoutParams params 
= imageView.getLayoutParams(); params.height=screenWidth/10; params.width =screenHeight/10; imageView.setLayoutParams(params);

注意示例:

我們需要獲取Android手機或Pad的螢幕的物理尺寸,以便於介面的設計或是其他功能的實現。下面就介紹講一講如何獲取螢幕的物理尺寸

    下面的程式碼即可獲取螢幕的尺寸。
    在一個Activity的onCreate方法中,寫入如下程式碼:

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

 但是,需要注意的是,在一個低密度的小屏手機上,僅靠上面的程式碼是不能獲取正確的尺寸的。比如說,一部240x320畫素的低密度手機,如果執行上述程式碼,獲取到的螢幕尺寸是320x427。因此,研究之後發現,若沒有設定多解析度支援的話,Android系統會將240x320的低密度(120)尺寸轉換為中等密度(160)對應的尺寸,這樣的話就大大影響了程式的編碼。所以,需要在工程的AndroidManifest.xml檔案中,加入supports-screens節點,具體的內容如下:      

<supports-screens
            android:smallScreens="true"
            android:normalScreens="true"
            android:largeScreens="true"
            android:resizeable="true"
            android:anyDensity="true" />
這樣的話,當前的Android程式就支援了多種解析度,那麼就可以得到正確的物理尺寸了。如果沒有這幾行程式碼,不管你怎麼調整layout中的控制元件,對應解析度的手機是沒有任何效果的。注意:由於android版本的不同,有些版本不支援xlargeScreens,可以直接將android:xlargeScreens="true"去掉。

杏總的程式碼也是按照這種方式來適配螢幕的

    private void layoutAdjust() {
        ECMLog.i_ui(CLASS_TAG, "layoutAdjust called...");
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) logoIV.getLayoutParams();
        params.width = 375 * mGlobalData.mScreenWidth / 1080;
        params.height = 394 * mGlobalData.mScreenWidth / 1080;
        params.topMargin = 470 * mGlobalData.mScreenHeight / 1920;
        logoIV.setLayoutParams(params);

        zhuanyedemimakaguanjiaIV = (ImageView) findViewById(R.id.zhuanyedemimakaguanjiaIV);
        params = (RelativeLayout.LayoutParams) zhuanyedemimakaguanjiaIV.getLayoutParams();
        params.height = 60 * mGlobalData.mScreenHeight / 1920;
        params.width = 470 * mGlobalData.mScreenWidth / 1080;
        zhuanyedemimakaguanjiaIV.setLayoutParams(params);

    }

給了一個線性佈局在1920*1080上的寬度和高度是375*394,現在的在不同的手機解析度上就可以按照上面的比例來上來動態的設計指定線性佈局的大小,滿足在不同的手機螢幕解析度上顯示的佈局的寬度和高度在不同的手機螢幕上顯示的效果是一樣的。

 

 動態設定控制元件的寬度和高度的思路來自於:

我們最好按照上面的思路來解決,上面在程式碼中這樣設定這樣寫主要用於佈局控制元件很少的情況,當佈局控制元件很多的時候,我們在程式碼中就會寫很多程式碼,這樣不太好,按照

我們首先開啟工程下的:

找到工程下的values-1920x1080資料夾

開啟資料夾下面的lay_x.xml和lay_y.xml的值

375px對應在lay_x中的值是:

394對應在lay_y的值是:

我們在程式中寫程式碼只需要在xml中進行設定就可以了,程式碼如下:

<TextView
        android:text="Hello World!"
        android:background="#809"
        android:layout_width="@dimen/x110"
        android:layout_height="@dimen/y99"/>

這樣我們就能夠滿足在不同的手機中控制元件顯示的寬度和高度在螢幕中顯示的大小是一樣的,是不是相當的經典。

上面的是對控制元件能夠適配,對應圖片的適配按照下面的方法

  • 為了讓我們提供的圖片符合各種螢幕密度的要求。我們需要為不同螢幕密度提供大小不同的圖片。
    上篇文章中我們提到了

    在Google官方開發文件中,說明了 mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 的尺寸比例進行縮放。例如,一個圖示的大小為48×48dp,表示在mdpi上,實際大小為48×48px,在hdpi畫素密度上,實際尺寸為mdpi上的1.5倍,即72×72px,以此類推。

因此,我們要在drawabledrawable-hdpidrawable-mdpidrawable-xdpidrawable-xhdpi等資料夾下放置相同名稱、符合上述比例的圖片資源。系統會根據螢幕密度的不同,而選擇對應的圖片進行載入。

在佈局檔案中的簡單使用:

 <Button
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:background="@drawable/ic_launcher" />

相關推薦

Android-螢幕(絕對詳細)(二)

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

Android-螢幕(絕對詳細)

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

Android螢幕(最權威的官方指導)

Android的螢幕適配一直以來都在折磨著我們這些開發者,本篇文章以Google的官方文件為基礎,全面而深入的講解了Android螢幕適配的原因、重要概念、解決方案及最佳實踐,我相信如果你能認真的學習本文,對於Android的螢幕適配,你將有所收穫! Android螢幕適配出現的原因

Android螢幕2-我想跟美工談談

[TOC] 前言 俗話說完事開頭難 對一個Android開發而言,專案正式開發的第一步就是拿到圖(高清圖和具體切圖)。第一步至關重要,UI圖做得好、標準高,後面的開發更傾向於按照高的標準去要求自己,開了個好頭。UI本身就做得很爛,很多不合理的設計互動,

Android-螢幕(轉)

2012年到2014年支援Android裝置的種類從3997增長到18796。同時各大廠商定製的螢幕尺寸也非常多。這將非常不利於我們進行螢幕適配。這要求我們必須掌握螢幕適配技能,以便使我們的app可以適用於不同螢幕尺寸的裝置上。 從上圖可以看出,主流的解析度是前六種:128

Android權威官方螢幕

Android的螢幕適配一直以來都在折磨著我們這些開發者,本篇文章以Google的官方文件為基礎,全面而深入的講解了Android螢幕適配的原因、重要概念、解決方案及最佳實踐,我相信如果你能認真的學習本文,對於Android的螢幕適配,你將有所收穫!

Android螢幕1-從dp、sp、px說起

[TOC] 初衷 現在寫App有些麻木的感覺,每天上班感覺提不起精神,專案和市場上同類產品競比還有很多做得不好的地方,但是就算知道了也沒什麼激情去改正。技術細節感覺很凌亂,不成體系,這讓我非常煩惱。所以希望通過寫Blog去實現: 督促自己。把技術和程

Android-螢幕(絕對詳細)(一)

前言:這篇文章依然是我在 慕課網 學習 凱子哥 的同名視訊 Android-螢幕適配全攻略 ,所記錄下來的筆記—凱子哥講得真的超詳細。 2012年到2014年支援Android裝置的種類從3997增長到18796。同時各大廠商定製的螢幕尺寸也非常多。這將非

Android筆記之螢幕

Android螢幕適配出現的原因 在我們學習如何進行螢幕適配之前,我們需要先了解下為什麼Android需要進行螢幕適配。 由於Android系統的開放性,任何使用者、開發者、OEM廠商、運營商都可以對Android進行定製,修改成他們想要的樣子。

Android知識梳理之螢幕

       引言: 我相信Android碎片化問題是讓所有的Android開發者都比較頭疼的問題.尤其是螢幕適配這一塊兒.想要自己的app在不同的裝置上面都有一個比較好的顯示效果.就必須做好相應的螢幕適配.本文是結合網上的相關知識總結、官方文件結合自己的一些理解來進行闡述

Andoid螢幕

在我們學習如何進行螢幕適配之前,我們需要先了解下為什麼Android需要進行螢幕適配。 由於Android系統的開放性,任何使用者、開發者、OEM廠商、運營商都可以對Android進行定製,修改成他們想要的樣子。 但是這種“碎片化”到底到達什麼

Android 劉海屏

本文由玉剛說寫作平臺提供寫作贊助,版權歸玉剛說微信公眾號所有 原作者:四月葡萄 版權宣告:未經玉剛說許可,不得以任何形式轉載 1.前言 先吐槽一下,劉海屏真醜。然而作為苦逼的開發者,還是要去適配劉海屏的。好了,吐槽完畢,進入正題。 這裡主要是介

Andriod界面設計的分辨率和尺寸 轉載

復雜 分別是 太差 content 基礎 hdp art 發布 一點 Andriod界面設計的分辨率和尺寸適配全攻略 轉載 2016年09月27日 17:45:56 第一、屏幕尺寸: 一般表示是手機的實際物理尺寸,屏幕尺寸指屏幕的對角線的長度,單位是英寸,1英寸

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

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

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

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

微信小程式小白總結3-簡易開發前的準備工作

老規矩,廢話全在第一章說了,下面直奔主題。 Why?    為什麼要做這些準備工作?        答:對於一個微信小程式的簡易開發,儘管核心在於其設計和程式設計實現。但是有很多東西要提前準備好,否則都程式設計完了再去弄,會有很多

iOS開發 | 熱點完美

開始: 當手機熱點開啟並被其他裝置接入時,狀態列會比普通狀態下多20px,此時整個檢視控制器會被向下推20px,推出螢幕。如果不做相應處理必然會帶來糟糕的使用者體驗,如下,兩張對比圖(注意下方的tabBar): 這是優化前的效果; 這是優化後的效果

Android螢幕-UI設計師不可不知的安卓螢幕知識

不少設計師和工程師都被安卓裝置紛繁的螢幕搞得暈頭轉向,我既做UI設計,也做一部分安卓介面佈局,剛好對這塊內容比較熟悉,也曾在公司內部做過相關的講座,在此,我將此部分知識重新梳理出來分享給大家! 1、瞭解幾個概念(1)解析度。解析度就是手機螢幕的畫素點數,一般描述成螢幕的

Android程序保活(中)

在上一篇部落格Android程序保活全攻略(上)中介紹了程序保活的背景和一些方法的思路和實現方式,本篇部落格我將承接上篇部落格,繼續進行介紹。 9) 1畫素懸浮層 **思路:**1畫素懸浮層是傳說的QQ黑科技,監控手機鎖屏解鎖事件,在螢幕鎖屏時啟動1個

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

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