読者です 読者をやめる 読者になる 読者になる

みんからきりまで

きりみんです。

Android5.0でshapeで書いた線が表示されない場合があったメモ

Android プログラミング

Android5.0 Lollipopで動作確認をしていたら、アプリによってshapeで描画した直線や点線が表示されていないケースがあったので、原因を検証してみた。

widthが0px時の挙動が変わった?

結論から言うと、width属性がちゃんと指定されていないと5.0では描画されないようだった。
4.4まではwidthを0pxにしたり指定しなくても縦幅1px以下の細い線が描画されていたけど、5.0では何も描画されなくなっていた。

描画される

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <stroke
        android:width="1dp"
        android:color="#000000" />
</shape>

描画されない

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <stroke
        android:color="#000000" />
</shape>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <stroke
        android:width="0dp"
        android:color="#000000" />
</shape>

これは実機じゃなくてもレイアウトエディタのpreviewでも確認出来る。
targetSdkなどには関係なく5.0で動かすと挙動が変わるっぽい。
まあ0pxに指定しても描画されるという今までの挙動の方が変だったので、修正されたのかもしれない。

ともかくstrokeのwidthを指定していなかったり0pxに指定していたりする実装のアプリは確認して修正した方がよさそう。
1px以下の細い線を描画したかったらどうすればいいんだろう。そんな線を描画したいデザイン自体が間違ってるのか。

ちなみにこんな話もあります。