Android - выведенный с закругленными углами только сверху

У меня было это возможно для округленного прямоугольника в качестве фона:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white" />
    <stroke android:width="1dp" android:color="@color/light_gray" />
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
    <corners android:radius="6dp" />
</shape>

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

Теперь я хочу изменить это только на верхние углы, поэтому я изменяю его на следующее:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white" />
    <stroke android:width="1dp" android:color="@color/light_gray" />
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
    <corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
             android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>

Но теперь ни один из углов не округлен, и я получаю простой прямоугольник. Что мне здесь не хватает?

Ответ 1

Попробуйте дать эти значения:

 <corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
         android:bottomLeftRadius="0.1dp" android:bottomRightRadius="0.1dp"/>

Обратите внимание, что я изменил 0dp на 0.1dp.

РЕДАКТИРОВАТЬ: Смотрите Aleks G комментарий ниже для более чистой версии

Ответ 2

Попробуйте сделать что-то вроде этого:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:bottom="-20dp" android:left="-20dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />

            <corners android:radius="20dp" />
        </shape>
    </item>
</layer-list>

Кажется, не подходит для установки другого углового радиуса прямоугольника. Таким образом, вы можете использовать этот хак.

Ответ 3

Основываясь на busylee answer, вы можете сделать drawable, который имеет только один un округленный угол (вверху слева), в этом примере):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
            <!-- A numeric value is specified in "radius" for demonstrative purposes only,
                  it should be @dimen/val_name -->
            <corners android:radius="10dp" />
        </shape>
    </item>
    <!-- To keep the TOP-LEFT corner UNROUNDED set both OPPOSITE offsets (bottom+right): -->
    <item
        android:bottom="10dp"
        android:right="10dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
        </shape>
    </item>
</layer-list>

Обратите внимание, что приведенный выше drawable отображается не в предварительном просмотре Android Studio (2.0.0p7). Чтобы его предварительно просмотреть, создайте другое представление и используйте его как android:background="@drawable/...".

Ответ 4

В моем случае ниже код

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="10dp" android:bottom="-10dp"
        >

        <shape android:shape="rectangle">
            <solid android:color="@color/maincolor" />

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

    </item>
    </layer-list>

Ответ 5

Я попробовал свой код. Я получил верхнюю закругленную угловую кнопку. Я дал цвета как @ffffff и srtoke, я дал # C0C0C0. попробуйте 1) дать андроид: bottomLeftRadius = "0.1dp" вместо 0. если его не работает 2) проверьте, какое разрешение и разрешение эмуляторов. Я создал загружаемую папку под res и используя ее. (hdpi, mdpi ldpi), у вас есть этот xml.  это мой выход

enter image description here

Ответ 6

Вам может потребоваться прочитать https://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

и ниже есть примечание.

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

Ответ 7

Создайте roung_top_corners.xml на drawable и скопируйте приведенный ниже код

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
    android:topLeftRadius="22dp"
    android:topRightRadius="22dp"
    android:bottomLeftRadius="0dp"
    android:bottomRightRadius="0dp"
    />
<gradient
    android:angle="180"
    android:startColor="#1d2b32"
    android:centerColor="#465059"
    android:endColor="#687079"
    android:type="linear" />
<padding
    android:left="0dp"
    android:top="0dp"
    android:right="0dp"
    android:bottom="0dp"
    />
<size
    android:width="270dp"
    android:height="60dp"
    /></shape>