7

私はこれを正しく理解していますか?

すべてのAndroidデバイスは、ldpi、mdpi、hdpi、xhdpiの4つの密度バケットのいずれかに分類されます。

したがって、密度についてこれらのそれぞれにドローアブルリソースが提供されている場合(ドローアブルまたは同じ名前のドローアブルがこれらの各フォルダーに存在する場合)、/ res/drawableまたは/に同じ名前のドローアブルを提供する必要はありません。 res/drawable-nodpi。

私の理解は正しいですか?

では、Android OSに新しい密度バケットが定義された場合に、アプリをより将来にわたって利用できるようにするために、/ res/drawableに同じリソースを提供することが理にかなっている唯一の理由は何でしょうか。

4

3 に答える 3

24

私の理解は正しいですか?

この段落を通して、あなたは多かれ少なかれ正しいです。次の段落で少し「脱線」します。

では、/res/drawable で同じリソースを提供することが理にかなっている唯一の理由は、Android OS 用に新しい密度バケットが定義された場合に備えて、アプリの将来性を高めるためでしょうか?

あまり。

res/drawable/本質的にスケーラブルなリソース(たとえば、 a ShapeDrawable) を配置します。res/drawable-nodpi/何らかの理由で、デバイス密度に合わせてスケーリングしたくないリソースをそこに置きます。

Android が新しい密度バケット (たとえば、-uhdpi400dpi の超高密度用) を発明した場合、密度バケットをスキップした場合、Android はおそらく今日と同じことを行うでしょう。つまり、他のエディションのいずれかをスケーリングします。たとえば、 がある場合-xhdpiとない場合、Android はデバイスで使用するために画像を-hdpiダウンサンプリングします。-xhdpi-hdpi

于 2012-05-19T20:21:52.270 に答える
5

カバーされる 4 つの密度バケットすべてにドローアブルがある限り、これは正しいです。/res/drawable でカスタム ドローアブルを作成し、密度スパン ドローアブルを参照するのが一般的な方法です。

たとえば、押された状態と押されていない状態のボタンが必要な場合があります。まず、押されたボタンと押されていないボタンの各密度のドローアブルを含めます。次に、/res/drawables に次の button_black_selector.xml を作成できます。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="false"
        android:drawable="@drawable/button_black"/>

    <item android:state_pressed="true"
        android:drawable="@drawable/button_black_selected" />

</selector>
于 2012-05-19T20:28:37.413 に答える
0

リソースが 4 つの密度すべてに追加されている場合、drawable をフォルダーに追加する必要がないことは間違いありません/res/drawable。ただし、新しい修飾子が表示された場合に備えて、既定のフォルダーに何かを置いておくのが最善であると正しく推測しました。したがって、mdpi リソースを/res/drawable-mdpiフォルダーではなく、既定のフォルダーに配置することをお勧めします ( /res/drawable/)。これは、あらゆる種類のリソースに適した方法です。

フォルダーに関して/res/drawable-nodpiは、他のすべての修飾子とは異なり、自動的にスケーリングされないリソースを含むことになっているため、特別なフォルダーです。したがって、通常は/res/drawable-nodpiフォルダを単独で使用するか、まったく使用しません。

于 2012-05-19T20:22:31.410 に答える