私はAndroidの修飾子について本当に混乱しました。
のカスタムデザインを作成したいRatingBar
。そこでrating_bar.xml
、ファイルを作成してフォルダに入れましたdrawable
。ソースは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background" android:drawable="@drawable/star_off"/>
<item android:id="@android:id/secondaryProgress" android:drawable="@drawable/star_on"/>
<item android:id="@android:id/progress" android:drawable="@drawable/star_on"/>
</layer-list>
xhdpiディスプレイ専用のスターデザインがあります。star_onとstar_offの画像をdrawable-xhdpiフォルダーに配置すると、すべての異なる密度(mdpiとhdpi)に合わせてすべてが自動的にサイズ変更されると思いました。はい、サイズは変更されましたが、hdpiとmdpiのアーティファクトがいくつかありました。ここと同じ:AndroidカスタムRatingBar画像アーティファクト そこで説明されているソリューションを試しましたが、何も役に立ちませんでした。xhdpiデバイスにはアーティファクトはありませんが、mdpiおよびhdpiデバイスにはアーティファクトがあります。
次に、star_onとstar_offの画像をdrawable-nodpiフォルダーに配置することにしました。そのため、xhdpiおよびhdpi画面ではアーティファクトなしで良好な結果が得られましたが、mdpi画面の画像は大きすぎました。
次に、star_onとstar_offの画像をdrawable-mdpiフォルダーにコピーし、画像のサイズを小さくすることにしました。それも役に立たなかった。
次に、大きな星の画像をxhdpiフォルダーとhdpiフォルダーに配置し、小さな星の画像をmdpiフォルダーに配置します。アプリをmdpiデバイスで実行すると、drawable-mdpiの画像が選択されると思いました。しかし、Androidはhdpiまたはxhdpiフォルダーから画像を選択し、アーティファクトが再びあるため、mdpi画面用に自動的に拡大縮小するようです。また、小さな画像を描画可能なフォルダに入れてみました。それも役に立たなかった。
では、Androidはどのようにリソースを選択するのでしょうか?Androidよりもdrawable、drawable-mdpi、drawable-hdpi、drawable-xhdpiのリソースがある場合は、デバイスと同じ密度でフォルダー内のリソースを検索しようと思いました。そして、ドローアブルフォルダから取得するよりもそのようなリソースがない場合。