昨日、Android Studioバージョン2.1.3に切り替えました。今日、プロジェクトの1つを再度開いて、ImageView
で使用するレイヤーリストドローアブルをいくつか追加しようとしました。たとえば、これは次のとおりです。
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:width="80px" Android:height="80px"
Android:top="0px" Android:left="0px"
Android:right="0px" Android:bottom="0px">
<shape Android:shape="rectangle">
<solid Android:color="@color/deep_orange"/>
</shape>
</item>
<item Android:width="60px" Android:height="60px"
Android:top="10px" Android:left="10px"
Android:right="10px" Android:bottom="10px">
<shape Android:shape="oval">
<solid Android:color="@color/light_yellow"/>
</shape>
</item>
</layer-list>
これは、Android Studioバージョンをアップグレードする前に取得したものであり、「IDEでレイアウトをレンダリングするときに使用するAndroidバージョン」として23を選択した場合にプレビューで取得するものです。 。
ただし、23未満のバージョンを選択すると、正方形だけが表示されます。
残念ながら、エミュレーター(Lollipop 22)またはデバイス(Jellybean 18)でアプリを実行すると、正方形しか表示されません。
これが役立つ場合に備えて:
Activity
はAppCompatActivity
を拡張しますこの問題は、どういうわけか、上位層にtop
、left
、right
、およびbottom
を使用することに関連していると思います。正方形の上に円を配置するだけで、プレビューと「本物」がすべてのAPIレベルで期待どおりに機能するためです。
[〜#〜] edit [〜#〜]また、同じコード/ xmlと次の(自動的に作成された)build.gradle
を使用して新しいプロジェクトを開始しました:
Activity
はAppCompatActivity
を拡張しますここでも同じ動作です。top
、left
、right
、およびbottom
を値!= 0で使用すると、APIレベル<= 22の上位層はレンダリングされません。
だから私の質問は:Android Studio 2.1.3を使用して、すべてのAPIレベルの「インセット付き」のシェイプドローアブルを作成するにはどうすればよいですか?
まず、問題の分析を手伝ってくれた @ pskink に感謝します:)
質問のxmlは、APIレベル23以降で機能しました。
「item」タグ内で幅と高さを設定することができます
のように @ Android開発者 状態 this SO post
width
タグを使用してheight
のShapeDrawable
属性とsize
属性を設定する必要があるため、下位バージョンでは機能しませんでした。
Androidは、挿入図(上、左、右、下)を考慮しながら、ドローアブル(->アスペクト比!)をスケーリングする方法を理解するためのサイズが必要だと思います。
また、(特定のAPIレベルの)xmlの形式が正しくない場合もあるように、Androidはサイレントに失敗し、単に形状を描画しませんでした。
したがって、解決策は次のとおりです。
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:width="80px" Android:height="80px"
Android:top="0px" Android:left="0px"
Android:right="0px" Android:bottom="0px">
<shape Android:shape="rectangle">
<solid Android:color="@color/deep_orange"/>
</shape>
</item>
<item Android:width="60px" Android:height="60px"
Android:top="10px" Android:left="10px"
Android:right="10px" Android:bottom="10px">
<shape Android:shape="oval">
<solid Android:color="@color/light_yellow"/>
<size Android:height="60px" Android:width="60px"/>
</shape>
</item>
</layer-list>