1. 程式人生 > >android資源適配

android資源適配

android程式在不同的環境(如解析度不同的機型,不同語言的作業系統)或狀態(如橫豎屏)下,需要不同的資源(如圖片,語言),一般情況下,這些資源是自適配的,只需要命名不同的資原始檔夾,把同名的資源放入這些資料夾中即可

  比如下面就是一個程式專案的資原始檔夾:



不同的命名代表什麼含義呢?詳細見下表:

限定符Qualifier

Values

移動國家碼MCC和行動網路碼MNC

手機裝置SIM卡上的移動國家碼和行動網路碼。比如mcc310-mnc004(美國,Verizon品牌); mcc208-mnc00(法國,Orange品牌); mcc234-mnc00(英國,BT品牌). 

如果這個裝置使用一個無線連線(GSM電話),則MCC來自SIM卡,而MNC來自該裝置將要附著的網路。你有時會僅使用MCC,例如包含特定國家合法資源在您的應用程式中。如果您的應用程式指定了MCC/MNC組合的資源,這些資源僅在MCCMNC都匹配的時候才能使用。

語言和區域Languageand region

兩個字母的ISO639-1語言碼和ISO3166-1-alpha-2區域碼("r"為字首)。比如en-rUS,fr-rFR,es-rES.這個程式碼是大小寫敏感的:語言碼是小寫字母,國家碼是大寫字母。你不能單獨指定一個區域,但是你可以單獨指定一個語言,比如en,fr, es, zh.

螢幕方向Screenorientation

縱向,橫向,正方形(port,land, square

螢幕畫素密度Screenpixel density

92dpi,108dpiAndroid選擇使用哪個資源時,它對螢幕畫素密度的處理和其它限定符不同。在文章後面描述的步驟1Android如何查詢最匹配的目錄中,螢幕密度總被認為是匹配的。在步驟4中,如果被考慮的限定符是螢幕密度,Android將選擇在那個位置的最佳匹配,而無需繼續步驟5

觸控式螢幕型別Touchscreentype

非觸控式,觸控筆,手指(notouch,stylus, finger

鍵盤可用方式Whetherthe keyboard is available to the user

外在鍵盤,隱藏鍵盤,軟鍵盤(keysexposed,keyshidden,keyssoft如果你的應用程式有一個特定的資源只能通過軟體盤使用,則使用keyssoft值,如果沒有keyssoft資源可用(只有keysexposedkeyshidden)並且該裝置顯示了一個軟鍵盤,那麼系統將使用keysexposed資源。

首選文字輸入方法Primarytext input method

不支援按鍵,標準鍵盤,12(nokeys,qwerty, 12key)

首選非觸控式導航方法Primarynon-touchscreen
navigation method

不支援導航,滑板,跟蹤球,滾輪(nonav,dpad, trackball, wheel)

螢幕解析度Screendimensions

320x240,640x480更大的解析度必須先被指定。

SDK版本SDKversion

裝置支援的SDK版本,比如v3Android1.0SDKv11.1SDKv21.5SDKv3

小版本(Minorversion)

你目前還不能指定小版本,它總是被設定為0

資料夾命名的各個部分是有順序的。即按上表從上到下的優先級別排列,如:

drawable-en-rUS-land-mdpi
drawable-en-rUS-port-160dpi-finger-qwerty-dpad-480x320/(US代表美式英語)

舉個使用過程中的例子:

任意建一個android專案。看一下res目錄結構:


drawable-hdpi-finger與drawable-ldpi目錄下面兩張圖片名稱一樣,但是圖片不是同一張,分別是:


layout、layout-finger、layout-land-finger下面的main.xml檔案內容分別是:

layout/main.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7. <ImageView
  8.     android:layout_width="wrap_content"
  9.     android:layout_height="wrap_content"
  10.     android:src="@drawable/icon"
  11.     />
  12. <Button
  13.     android:layout_width="wrap_content"
  14.     android:layout_height="wrap_content"
  15.     android:background="@drawable/icon"
  16.     />
  17. <TextView
  18.     android:layout_width="fill_parent"
  19.     android:layout_height="fill_parent"
  20.     android:text="layout only"/>
  21. </LinearLayout>
layout-finger/main.xml
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7.     <ImageView
  8.         android:layout_width="wrap_content"
  9.         android:layout_height="wrap_content"
  10.         android:src="@drawable/icon"
  11.         />
  12.     <Button
  13.         android:layout_width="wrap_content"
  14.         android:layout_height="wrap_content"
  15.         android:background="@drawable/icon"
  16.         />
  17.     <TextView
  18.         android:layout_width="fill_parent"
  19.         android:layout_height="fill_parent"
  20.         android:text="layout-finger"/>
  21. </LinearLayout>

layout-land-finger/main.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7.     <ImageView
  8.         android:layout_width="wrap_content"
  9.         android:layout_height="wrap_content"
  10.         android:src="@drawable/icon"
  11.         />
  12.     <Button
  13.         android:layout_width="wrap_content"
  14.         android:layout_height="wrap_content"
  15.         android:background="@drawable/icon"
  16.         />
  17.     <TextView
  18.         android:layout_width="fill_parent"
  19.         android:layout_height="fill_parent"
  20.         android:text="layout-land-finger"/>
  21. </LinearLayout>
可以看出,他們區別在於TextView的顯示內容不同,其它的一樣。

執行App,在模擬器上顯示效果


切換模擬器螢幕方向:


可以看出,顯示的圖片始終是,而不是。說明帶有finger的資料夾優先級別較高。

layout-land-finger:適合電容屏、電阻屏以及非觸控式螢幕的裝置並且該裝置是水平方向。

layout-finger:適合電容屏、電阻屏以及非觸控式螢幕的裝置但不要求是水平方向。

layout:適合電阻屏以及非觸控式螢幕的裝置。

另外,圖片資源應該按照l:m:h = 

相關推薦

android資源

android程式在不同的環境(如解析度不同的機型,不同語言的作業系統)或狀態(如橫豎屏)下,需要不同的資源(如圖片,語言),一般情況下,這些資源是自適配的,只需要命名不同的資原始檔夾,把同名的資源放入這些資料夾中即可   比如下面就是一個程式專案的資原始檔夾: 不同的命名代表什麼含義呢?詳

Android Res資源詳解

由於裝置的多樣性,Android 系統會檢測當前裝置配置,併為應用載入合適(最匹配)的資源。下面根據經驗結合官方api,詳細說下系統適配的規則。 一、10種資源。在 res中以 <resources_name>-<config_qualifier> 

Android基礎——安卓6.0新權限系統

jsb 安全 認同 相對 選項 blank tar 也會 返回 在安卓6.0版本以後,新的權限系統出現了,為了更好的保護用戶的安全,新的權限系統需要開發者在代碼中手動申請,所以為了適配6.0權限系統,我們不得不學習權限系統 安卓6.0新權限系統分類有兩種 普通權限(nor

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

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

Android 螢幕之 dimens

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

android解析度

轉載請註明出處:https://blog.csdn.net/u011038298/article/details/83269208 解析度 高度 寬度 寬高比(寬/高) 1920x1080 19

Android APP全面屏手機的技術要點

關於全面屏 全面屏是手機業界對於超高屏佔比手機設計的一個寬泛的定義。從字面上解釋就是,手機的正面全部都是螢幕,四個邊框位置都是採用無邊框設計,追求接近100%的屏佔比。但受限於目前的技術,還不能做到手機正面屏佔比100%的手機。現在業內所說的全面屏手機是指真實屏佔比可以達到80%以上,擁有超窄邊

Android螢幕詳解

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

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。同時各大廠商定製的螢幕尺寸也非常多。這將非常

Android螢幕實踐總結

##名詞解釋 ####px (pixels) 最為熟悉的畫素,設計圖以此為單位標註; ####dp或dip (device independent pixels) 裝置獨立畫素,與裝置螢幕有關,Android的UI標註以此為單位可最大限度適配不同解析度; ####sp (scaled p

Android AutoLayout問題解決方案

本文在鴻洋的AutoLayout上做了修改,原文地址https://blog.csdn.net/lmj623565791/article/details/49990941。 AutoLayout原本的使用方法和思想沒有發生變化,主要針對適配中出現的問題進行修改。如果你遇到了下邊的一些問題,可

android螢幕問題分析及各種解決方案優缺點分析

序 從事android開發已有5年之久,專案中遇到的螢幕適配的問題也有n次了,可是有一個很奇怪也很讓人頭疼的現象讓從事多年開發的我很不爽。什麼問題呢,就是“適配虐我千萬遍,我見適配如初見”,真是想說一句fuck,這次我終於堅決的征服掉了她,下面就來具體講解征服她的全過程,一定要

Android螢幕之dp分包法

  前言 網上關於螢幕適配的文章已經鋪天蓋地了,為什麼我還要講?因為網上現在基本都是使用px適配,即每種螢幕解析度的裝置需要定義一套dimens.xml檔案。再加上有些手機還有虛擬按鍵(例如華為),這樣就還需要每個有虛擬按鍵的裝置加多一套dimens.xml檔案,再加上平板那些你會

Android 螢幕之weight的使用

1. 要點:必須在LinearLayout的佈局內使用才有效果 2. 計算公式: 控制元件寬度=控制元件原始寬度+權重比例xLinearLayout剩餘寬度。 3. 實踐: <?xml version="1.0" encoding="utf-8"?> <LinearLa

Android螢幕方案

目錄介紹 1.螢幕適配定義 2.相關重要的概念 2.1 螢幕尺寸[物理尺寸] 2.2 螢幕解析度[px] 2.3 螢幕畫素密度[dpi] 2.4 dp、dip、dpi、sp、px 2.5 mdpi、hdpi、xdpi、xxdpi 2.6 獲取螢幕解析度[寬

Android 螢幕方案

前言 本文為自身的總結與結合其他文章引用而成,分別為: wangwangli6: Android開發:最全面、最易懂的Android螢幕適配解決方案 https://blog.csdn.net/wangwangli6/article/details/6

總結一篇初級Android 開發

總結一篇Android 開發 適配      博主從入職的第一個專案起就遇到了Android 適配,適配各種手機和主流平板,那可真的蛋疼,而我們的UI設計師又比較嚴格,所以為此我也是研究了不少,學到了不少!僅作為入門級適配! 本文主要講語言適配,解析度(

Android O 詳細指南

1前言 最近 Google 對 Google Play 上架的應用提出了目標 API 等級要求。 從 2018 年 8 月 1 日起,所有向 Google Play 首次提交的新應用都必須針對 Android 8.0 (API 等級 26) 開發; 2018 年