androidのshapeのバグ

androidのshapeに関して、APIレベル10以下で左右が逆になるバグがあるのですが、これに関して日本語の情報があまり見当たらなかったので書いておこうと思います。
例えば下記

のような形を描きたい時に、普通に考えれば下のようなXMLを書くと思います。

<shape android:shape="rectangle">
<corners
  android:topLeftRadius="10dp"
  android:topRightRadius="0.1dp"
  android:bottomLeftRadius="10dp"
  android:bottomRightRadius="0.1dp"/>
</shape>

ところが、これを実行すると、APIレベル11(Android3.0)以上では期待通り上のような形が描画されるのですが、APIレベル10以下ではなぜか下記のような形に描画がされます。

あれれれ?な感じですが…
これは、APIレベル10以下のバグで、下辺の左右の指定が逆に扱われてしまうのです。なんともお粗末のバグですが…
で、仕方なく下辺の左右の指定を逆にして

<shape android:shape="rectangle">
<corners
  android:topLeftRadius="10dp"
  android:topRightRadius="0.1dp"
  android:bottomLeftRadius="0.1dp"
  android:bottomRightRadius="10dp"/>
</shape>

こんな風に書くとAPIレベル10以下で正常になるのですが、当然APIレベル11(Android3.0)以上の方がおかしなことになります。
でどうするかというと、drawable-v11 というディレクトリを、res 配下に配置してそれぞれ使い分けられるようにします。
具体的にはdrawable-v11に上のXMLを、drawableに下のXMLを置いてあげると、それぞれのXMLが適用されるので、どちらも丸く収まるという感じです。
ちなみに、0.1dpとしているのは、0dpと指定するとAPIレベル7などで、radiusが効かなくなってしまうためやむを得ず微小なradiusを指定しているものです。
どうにも残念な仕様ですね…

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

getting health insurance in new york buy clomid online UK major health insurance companies buy levitra uk online what are wells fargo hours buy finasteride affordable health insurance for children accutane no prescription medical center of trinity viagra online uten resept midwestern university wellness center dapoxetine top individual health insurance companies viagra ireland