簡體   English   中英

在Android上重復使用不同屏幕尺寸和密度的可繪制圖像

[英]Reuse drawable images for different screen sizes and densities on Android

背景:我正在為平板電腦(風景)開發一個Android應用程序,其圖像資源的分辨率為1920x1200。 該分辨率適合以下屏幕尺寸和密度:

drawable-xlarge-hdpi
drawable-large-xhdpi

問題:如果我在這兩個文件夾中包含所有重復的圖像資源,則APK的最終大小將不必要地大

我的方法不成功:我嘗試使用Alias來實現此處定義的drawable: http//developer.android.com/guide/topics/resources/providing-resources.html#AliasResources

我有我的圖像資源:

res/drawable-nodpi/image_cmn.png

和相應屏幕大小和密度文件夾中的兩個別名:

res/drawable-xlarge-hdpi/image.xml
res/drawable-large-xhdpi/image.xml

image.xml:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/image_cmn" />

當然,當我在布局文件中使用我的圖像時,我引用了別名:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/image" />

但遺憾的是Android沒有正確調整我的測試平板電腦(mdpi)的資源,結果是我有更大的圖像。

我試圖將原始png移動到res / drawable甚至res / raw但結果與res / drawable-nodpi相同

如果我將此png移動到res / drawable-xlarge-hdpi (與xml別名相同),結果是正確的但自然不能解決我的問題因為我也必須將它們復制到res / drawable-large-xhdpi和apk大小增加。

有誰知道如何實現這一目標?

我試圖避免在ImageViews上使用wrap_content,因為不同的平台版本會不同地調整圖像大小,如果在dp中放置一個明確的寬度和高度,那么選擇哪個圖像並不重要。

在你的情況下,我會在drawable / xhdpi中有一個圖像。 在dp中的布局文件中指定它的寬度和高度。 對於1920x1200px的圖像,即layout_width =“960dp”layout_height =“600dp”

與大型平板電腦相比,x-large平板電腦上的圖像尺寸大致相同。

如果您希望圖像在x-large平板電腦上更大,請包含第二個布局文件,其中圖像的寬度和高度會增加但保持相同的圖像。

或者,您可以使用大型和x大型之間不同的維度資源。

我可以為這個問題提出兩個解決方案:

第一:

  1. 將所有圖像放到資源文件夾中。 按分辨率將它們拆分為文件夾。
  2. 編寫自己的邏輯以確定當前的設備分辨率和/或大小。
  3. 從確定分辨率的文件夾中選擇圖像。
  4. 在代碼中將其設置為ImageView

第二個(它很難看,但非常快):

只需使用tinypng.com壓縮您的png圖像即可 它可以將圖像重新調整到70-80%而不會降低質量(適用於移動設備)。

這個怎么樣:

  1. 將所有圖像資源放在res/drawable-nodpi
  2. 將不同的布局文件放在res/layout-xlargeres/layout-largeres/layout
  3. ImageView上使用此圖像時,請勿使用match_parentwrap_content ,而是使用dp中的計算大小。

這應該工作,但是,缺點是它不使用預縮放 ,這意味着在較低的dpi設備上,它將消耗更多的內存。

如果你想為所有尺寸的設備使用相同的圖像,那么我認為你必須使用9-Patch Images。

Android官方文章點擊此處。

之前:

在此輸入圖像描述

后:

在此輸入圖像描述

請參閱: Android 9 Patch Image Tutorial

希望能幫助到你。

如果你想為所有尺寸的設備使用相同的圖像,那么我認為你應該使用9補丁圖像,每個布局包含在android中的線性布局內的重量標簽。 我認為這是100%的工作。 我確定。 因為我使用這種方法進行通用應用(意味着平板電腦和設備應用)

好的,我得到了你的問題。我的話與這個問題有關

有兩種方式,我推薦兩種方式。

第一種方式 (與您當前的問題相關更方便。)

如果大小變大,則上傳多個apk。

按照官方指南

第二種方式我更喜歡用這種方式。

創建多個布局。 如下

res / layout /main_activity.xml --->#適用於手機 (可用寬度小於600dp)

res / layout-sw600dp /main_activity.xml - >#適用於7“平板電腦 (600dp寬大)

res / layout-sw720dp /main_activity.xml#適用於10英寸平板電腦 (720dp寬大)

我強烈建議谷歌閱讀這篇官方文檔的每個單詞。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM