11

コンテキスト: 解像度が 1920x1200 の画像リソースを使用して、タブレット (横向き) 用の Android アプリケーションを開発しています。その解像度は、次の画面サイズと密度に適合します。

drawable-xlarge-hdpi
drawable-large-xhdpi

問題: この 2 つのフォルダーに複製されたすべての画像リソースを含めると、APK の最終的なサイズが不必要に大きくなります

私の失敗したアプローチ: ここで定義されているように、このドローアブルに Alias を使用しようとしました: http://developer.android.com/guide/topics/resources/providing-resources.html#AliasResources

画像リソースは次の場所にあります。

res/drawable-nodpi/image_cmn.png

対応する画面サイズと密度フォルダー内の 2 つのエイリアス:

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 サイズにコピーする必要があります。増加します。

誰もそれを達成する方法を知っていますか?

4

6 に答える 6

3

プラットフォームのバージョンが異なるとイメージのサイズ変更が異なるため、ImageViews で wrap_content を使用しないようにしています。dp に明示的な幅と高さを指定すると、どのイメージが選択されるかは問題になりません。

あなたの場合、drawable/xhdpi に 1 つの画像があります。幅と高さをレイアウト ファイルに dp で指定します。1920x1200px の画像の場合、layout_width="960dp" layout_height="600dp"

X-Large タブレットの画像は、Large タブレットとほぼ同じ物理サイズになります。

特大サイズのタブレットで画像を大きくしたい場合は、画像の幅と高さを増やした 2 番目のレイアウト ファイルを含めますが、同じ画像を保持します。

または、ラージと特大で異なるディメンション リソースを使用することもできます。

于 2014-08-13T03:52:31.967 に答える
2

さて、私はあなたの問題を理解しました.私はこの問題に関連する私の言葉を持っています

2つの方法があり、両方をお勧めします。

最初の方法(現在の問題に関連するより便利です。)

サイズが大きくなった場合は、複数の apk をアップロードします。

公式ガイドに従ってください。

2番目の方法は、この方法を使用することを好みます。

複数のレイアウトを作成します。以下のように

res/ layout /main_activity.xml ---> #ハンドセットの場合 (使用可能な幅が 600dp 未満)

res/ layout-sw600dp /main_activity.xml --># 7 インチ タブレットの場合(幅 600 dp 以上)

res/ layout-sw720dp /main_activity.xml # 10 インチ タブレット用(幅 720 dp 以上)

この公式ドキュメントの各単語を Google で読むことを強くお勧めします。

ありがとう。

于 2014-08-19T14:15:22.040 に答える
2

これはどう:

  1. すべての画像リソースを入れますres/drawable-nodpi
  2. res/layout-xlargeres/layout-large、に異なるレイアウト ファイルを入れます。res/layout
  3. でこの画像を使用する場合は、またはを使用ImageViewせず、代わりに dp で計算されたサイズを使用してください。match_parentwrap_content

これは機能するはずですが、欠点はpre-scalingを使用しないことです。つまり、dpi が低いデバイスでは、より多くのメモリを消費します。

于 2014-08-13T03:55:24.057 に答える
1

すべてのサイズのデバイスに同じイメージを使用する場合は、 9-Patch イメージを使用する必要があると思います。

Androidの公式記事はこちら。

前:

ここに画像の説明を入力

後:

ここに画像の説明を入力

これを参照してください:Android 9 Patch Image Tutorial

それが役に立てば幸い。

于 2014-08-13T03:04:51.297 に答える
1

すべてのサイズのデバイスに同じ画像を使用する場合は、Android の線形レイアウト内に重みタグを含む各レイアウトで 9 パッチ画像を使用する必要があると思います。100%仕事だと思います。確信してます。私はユニバーサルアプリケーション(タブレットとデバイスアプリケーションを意味する)にこの方法論を使用しているため

于 2014-08-18T04:11:05.503 に答える