Android: углы формы не работают при настройке отдельных углов

Мне нужно иметь фон, который имеет закругленные нижние левые/правые конусы (но не верхние левые/правые), ниже мой xml файл:

<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle" android:padding="1dp">
        <solid android:color="#FFbdbebd"/>
        <corners
            android:bottomLeftRadius="12dip"
            android:bottomRightRadius="12dip"
            android:topLeftRadius="0dip"
            android:topRightRadius="0dip"/>
    </shape>
</item>
</layer-list>

Но результатом является простой прямоугольник без закругленного угла, если я использую только:

android:radius="12dip"

то все углы округлены, я искал и обнаружил ошибку, связанную с этим:

http://code.google.com/p/android/issues/detail?id=9161

но состояние ошибки:

Влево/вправо переключается, потому что андроид: bottomRightRadius = "2dp" оказалось, чтобы указать левый нижний округленный угол.

который не может быть связан с моей проблемой, я также попытался использовать:

android:radius="12dip"

за которым следует

android:topLeftRadius="0dip"
android:topRightRadius="0dip"

без успеха.

Может ли кто-нибудь помочь? Спасибо!

Ответ 1

Я обнаружил, что может быть ошибка, если вы устанавливаете отдельные углы, и если любой из них равен 0, все они становятся 0, поэтому в конце я установил два из них на 1dip и два других на все, что мне нужно, поскольку ни один из них не равен 0, поэтому ошибка не влияет на него, и результат выглядит хорошо.

Ответ 2

Кажется, это известная проблема. Каждый угол должен быть > 1, иначе углы не будут округлены. Согласно документации на Android, это можно сделать, но это хакеры:

Примечание. Каждый угол должен (изначально) иметь радиус угла больше 1, иначе углы не закруглены. Если вы хотите, чтобы определенные углы не округлялись, необходимо использовать андроид: радиус, чтобы установить радиус угла по умолчанию больше 1, но затем переопределить каждый угол с нулевыми значениями, обеспечивая нуль ( "0dp" )), где вы не хотите > закругленные углы.

Смотрите здесь: http://developer.android.com/guide/topics/resources/drawable-resource.html#corners-element

Ответ 3

Измените это:

 <corners 
        android:bottomRightRadius="12dp" 
        android:bottomLeftRadius="12dp"
        android:topLeftRadius="0dp" 
        android:topRightRadius="0dp"/>

:

 <corners 
        android:radius="1dp"
        android:bottomRightRadius="12dp" 
        android:bottomLeftRadius="12dp"
        android:topLeftRadius="0dp" 
        android:topRightRadius="0dp"/>

и он должен работать как ожидалось.

Ответ 4

попробуйте эту работу для меня.

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
        <solid android:color="#FFFFFF"/>
        <corners 
            android:bottomRightRadius="30dp" 
            android:bottomLeftRadius="30dp"
            android:topLeftRadius="30dp" 
            android:topRightRadius="30dp"/>
</shape>