C-FRONT

エモくありたい

API23以下でも<item>で幅/高さを設定したい

layer-listでdrawableファイルを書く時等で、読み込むiconの表示幅/高さなどを変えたい時のメモ。 具体的には左を右のようにしたい時。

f:id:chiiia12:20181030184221j:plainf:id:chiiia12:20181030184218j:plain

API23以降だとitem要素にwidthとheightが設定できる

ref:

stackoverflow.com

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval">
            <solid android:color="@color/gray" />
        </shape>
    </item>
   <item
    android:width="16dp"
    android:height="16dp"
    android:drawable="@drawable/ic_sample" />
</layer-list>

このitem要素へのwidth/height設定は4系5系の端末だと効かないので、以下の方法でAPI23以下でもサイズを調整して表示できるようにした。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval">
            <solid android:color="@color/gray" />
        </shape>
    </item>
    <item
        android:bottom="8dp"
        android:drawable="@drawable/ic_sample"
        android:left="8dp"
        android:right="8dp"
        android:top="@8dp" />
</layer-list>

幅や高さが設定できない代わりにtop/left/right/bottomがpaddingのような役割を果たしてくれるのでiconの幅/高さが調整できる。

[参考] bitmapでdrawableを読み込み<size>要素を使う方法なども試したがうまくいかなかった。 android - Shape drawable in layer-list rendered incorrectly for APIs below 23 - Stack Overflow