2012-05-19 3 views
7

これは正しく理解していますか?ldpi、mdpi、hdpi、xhdpiにdrawableリソースが提供されている場合、このdrawableはnodpiに指定する必要はありませんか?

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

したがって、これらの密度ごとに描画可能なリソースが提供されている場合(これらの各フォルダには描画可能または同じ名前が存在します)、/ resに同じ名前の描画可能ファイルを用意する必要はありません/ drawableまたは/ res/drawable-nodpiです。

私の意見は正しいですか?

なぜなら、/ res/drawableに同じリソースを提供するのは、Android OS向けに新しい密度バケットが定義されている場合に、将来的にアプリをより確実にするためです。

答えて

24

私の解決策は正しいですか?

この段落を通じて、あなたは多かれ少なかれ正しいです。

したがって、/ res/drawableに同じリソースを提供することが理にかなっているのは、アプリケーションをより将来的にするための理由だけです。新しい密度バケットがAndroid OS用に定義されている場合はどうすればよいですか?

そうでもありません。

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

Androidが新しい密度バケット(たとえば、400dpiの超高密度の場合は-uhdpi)を発明した場合、Androidは密度バケットをスキップすると現在の処理を実行します。たとえば、-xhdpiがあり、-hdpiを持っていない場合、Androidは-hdpiデバイスで使用するために-xhdpiイメージをダウンサンプリングします。

+0

nodpiの概念についての説明。 –

0

あなたのリソースがすべての4つの密度に対して追加されている場合、にはがあり、/res/drawableにドロウアブルを追加できません。ただし、新しい修飾子が表示された場合は、デフォルトのフォルダに何かを入れるのが最善であると正しく推測しています。したがって、/res/drawable-mdpiフォルダではなく、代わりにデフォルトフォルダ(/res/drawable/)にmdpiリソースを配置することをお勧めします。あらゆる種類のリソースにとっては良い習慣です。

/res/drawable-nodpiフォルダは、他のすべての修飾子とは異なり、自動的に拡大/縮小されないリソースが含まれているはずなので、特別なフォルダです。したがって、通常は/res/drawable-nodpiフォルダのみを使用するか、まったく使用しないでください。

+0

だからなぜdownvote?答えに誤りがありますか? – Malcolm

5

これは、対象となる4つの密度バケットすべてにドロアブルがある限り、正しいです。一般的なプラクティスは、/ res/drawableにカスタム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> 
+0

興味深くてエレガントなアプローチ、tx、David Z – mrd

関連する問題