icon_Android_35x35

Workaround für Corner-Bug in Android

In Android kann man per XML relativ einfach die Darstellung von Buttons, Hintergründen usw. ändern. Um z.B. im Hintergrund ein Rechteck mit abgerundeten Ecken auf der rechten Seite zu zeichnen, legt man im res/drawable Verzeichnis eine neue Definition für ein Shape an:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <corners
        android:bottomLeftRadius="0dp"
        android:bottomRightRadius="10dp"
        android:topLeftRadius="0dp"
        android:topRightRadius="10dp" />
    <solid android:color="#55000000" />
    <stroke
        android:width="1dp"
        android:color="#77000000" />
</shape>

So zumindest die Theorie. In der Praxis stellt sich heraus, dass die rechte obere und die linke untere Ecke abgerundet werden. Dies ist auf einen Bug in Android zurückzuführen, bei dem bottomLeftRadius und bottomRightRadius vertauscht wurden. Mit diesem Wissen ist es natürlich keine große Herausforderung die beiden Eigenschaften einfach ebenfalls vertauscht anzugeben. Allerdings wurde der Bug in der Android Version 3.1 behoben. Für alle Versionen ab 3.1 müssen die Eigenschaften somit umgekehrt angegeben werden, als in den Versionen zuvor.

Um die Eigenschaften in der für jede Version notwendigen Weise anzugeben, kann man einen zusätzlichen Ordner res/drawable-v12 erstellen und die betroffenen XML Dateien in diesen kopieren. Wird die App auf einem Gerät mit einer Android Version höher 3.1 (API-Level 12) ausgeführt, werden Dateien in res/drawable-v12 bevorzugt geladen und gleichnamige Dateien in res/drawable ignoriert.

Dieser Beitrag wurde unter Android veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Hinterlasse eine Antwort