- Android設(shè)計(jì)模式與最佳實(shí)踐
- (英)凱爾·繆
- 1384字
- 2021-02-07 09:26:39
2.3 添加圖像資源
適配多種屏幕密度和尺寸是Android中最有趣的挑戰(zhàn)之一。當(dāng)顯示位圖圖像時(shí)尤其如此,其中有兩個(gè)互斥的問(wèn)題需要解決。
? 低分辨率圖像在拉伸到適合大屏幕或高分辨率屏幕時(shí),顯示得很模糊。
? 在小屏幕、低密度屏幕上顯示時(shí),高質(zhì)量圖像所消耗的內(nèi)存遠(yuǎn)遠(yuǎn)超過(guò)所需。
除屏幕尺寸外,不同屏幕密度的問(wèn)題主要通過(guò)使用密度無(wú)關(guān)像素(dp)來(lái)解決。
2.3.1 管理屏幕密度
dp是基于160dpi屏幕的抽象測(cè)量單位。dp意味著無(wú)論屏幕密度如何,寬度為320dp的小部件總是2英寸
寬。當(dāng)涉及屏幕的實(shí)際物理尺寸時(shí),屏幕密度可以使用各種布局類型、支持庫(kù)以及屬性(如weight和gravity)來(lái)管理。下面來(lái)看如何提供圖像,以適應(yīng)最廣泛的屏幕密度范圍。
Android系統(tǒng)使用以下限定符劃分屏幕密度:
? 低密度(ldpi)——120dpi
? 中密度(mdpi)——160dpi
? 高密度(hdpi)——240dpi
? 超高密度(xhdpi)——320dpi
? 超超高密度(xxhdpi)——480dpi
? 超超超高密度(xxxhdpi)——640dpi
在安裝應(yīng)用程序的過(guò)程中,每個(gè)設(shè)備只會(huì)下載符合其規(guī)格的圖像。這樣不僅可以節(jié)省舊設(shè)備上的內(nèi)存,而且可以為有能力的設(shè)備提供最豐富的視覺(jué)體驗(yàn)。
從開(kāi)發(fā)者的角度來(lái)看,似乎需要為給定項(xiàng)目中的所有圖像都生成6個(gè)版本。值得慶幸的是,情況通常并非如此。在大多數(shù)手持設(shè)備上,640dpi的圖像和320dpi的圖像之間的差別并不明顯。而且,考慮到我們的“三明治制作應(yīng)用程序”的大多數(shù)用戶只需要通過(guò)滑動(dòng)瀏覽菜單上的原料,而不需要仔細(xì)觀察圖像的質(zhì)量,我們可以僅為中、高和超高密度設(shè)備提供圖像。
在考慮高端設(shè)備的圖像質(zhì)量時(shí),一條經(jīng)驗(yàn)法則是將我們的圖像大小與該設(shè)備原生攝像頭生成的圖像大小進(jìn)行比較。為了提供更大的圖像以改善用戶體驗(yàn)而增加內(nèi)存需求很可能不值得。
在本示例中,我們將提供適合卡片視圖的圖像,該視圖將在縱向模式下占據(jù)大部分屏幕寬度。現(xiàn)在,需要找到一幅大約2000像素寬的圖像。在下面的示例中,該圖像被稱為sandwich.png,它的尺寸為1920像素×1080像素。你的圖像不需要和該圖像的尺寸保持一致,但稍后我們將看到,精心選擇的圖像比例是良好用戶界面實(shí)踐的重要組成部分。
一幅寬度為1920像素的圖像,在320dpi的超高密度設(shè)備上顯示的寬度為6英寸。至少現(xiàn)在我們可以假設(shè)應(yīng)用程序?qū)⑼ㄟ^(guò)移動(dòng)設(shè)備訪問(wèn),而不是通過(guò)計(jì)算機(jī)或電視訪問(wèn)。因此,即使在10英寸的高密度平板計(jì)算機(jī)上,6英寸也足以滿足需求。接下來(lái)看看如何為其他屏幕密度做準(zhǔn)備。
2.3.2 使用指定資源
通過(guò)在指定資源目錄中存放為特定屏幕密度配置的圖像,可以輕松地得到適合各種屏幕密度的位圖。在Android Studio中,可以通過(guò)以下步驟從項(xiàng)目資源管理器創(chuàng)建指定資源目錄。
(1)首先,在res文件夾下創(chuàng)建一個(gè)新的目錄,并將其命名為drawable-mdpi。
(2)接下來(lái),創(chuàng)建另外兩個(gè)名為drawable-hdpi和drawable-xhdpi的同級(jí)目錄。
(3)通過(guò)在項(xiàng)目資源管理器的drawable上下文菜單中選擇Show in Explorer(在資源管理器中顯示),直接打開(kāi)這些新文件夾。
(4)將sandwich.png圖像添加到drawable-xhdpi文件夾中。
(5)把這張圖像復(fù)制兩份,并按與原圖3∶4和1∶2比例分別縮放。
(6)將副本分別放在drawable-hdpi和drawable-mdpi目錄中。
現(xiàn)在,這些變體將體現(xiàn)在項(xiàng)目資源管理器中,如圖2-5所示。

圖2-5
現(xiàn)在我們可以放心,應(yīng)用程序只會(huì)根據(jù)設(shè)備的屏幕密度下載最適合、內(nèi)存效率最高的圖像資源。要查看圖像,請(qǐng)將以下圖像視圖添加到項(xiàng)目的activity_main.xml文件中。
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/sandwich" />
可以在模擬器或真機(jī)上的預(yù)覽屏幕查看輸出,如圖2-6所示。

圖2-6
這種方法的好處在于,一旦正確指定了圖像的變體,就可以簡(jiǎn)單地將其稱為@drawable/sandwich,并且可以忽略它當(dāng)前所在的真機(jī)或它存儲(chǔ)在哪個(gè)目錄中。
這使得我們可以自由地探索如何將圖像作為界面的一部分。
- Spring 5.0 By Example
- 深入淺出WPF
- Vue.js 3.x從入門(mén)到精通(視頻教學(xué)版)
- Learning Flask Framework
- Learning Informatica PowerCenter 10.x(Second Edition)
- PostgreSQL 11從入門(mén)到精通(視頻教學(xué)版)
- Learning Selenium Testing Tools(Third Edition)
- Mastering Apache Maven 3
- Visual C#通用范例開(kāi)發(fā)金典
- Java程序設(shè)計(jì)入門(mén)
- Python算法詳解
- Fastdata Processing with Spark
- 深入理解BootLoader
- 實(shí)驗(yàn)編程:PsychoPy從入門(mén)到精通
- Qt 5.12實(shí)戰(zhàn)