Как сделать форму с закругленным левым верхним закругленным углом и закругленным левым нижним углом? - PullRequest
74 голосов
/ 16 июня 2010

Я хочу сделать форму с закругленным левым верхним углом и левым нижним закругленным углом:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#555555"/>    

    <stroke android:width="3dp"
            android:color="#555555"
            />

    <padding android:left="1dp"
             android:top="1dp"
             android:right="1dp"
             android:bottom="1dp"
             /> 

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

Но приведенная выше форма не дала мне того, чего я хочу. Это дает мне прямоугольник без каких-либо закругленных углов.

Может кто-нибудь помочь?

Спасибо.

Ответы [ 7 ]

57 голосов
/ 16 июня 2011

Хотя на этот вопрос уже был дан ответ (это ошибка, приводящая к изменению bottomLeftRadius и bottomRightRadius), эта ошибка была исправлена ​​в Android 3.1 (API-уровень 12 - протестирован на эмуляторе).

Таким образом, чтобы убедиться, что ваши рисованные элементы выглядят корректно на всех платформах, вы должны поместить «исправленные» версии рисованных объектов (т. Е. Там, где нижний левый / правый радиусы действительно верны в XML) в папке res / drawable-v12 вашего приложение. Таким образом, все устройства, использующие версию Android> = 12, будут использовать правильные файлы для рисования, в то время как устройства, использующие более старые версии Android, будут использовать «обходные пути», которые находятся в папке res / drawables.

48 голосов
/ 16 июня 2010

Это похоже на ошибку http://code.google.com/p/android/issues/detail?id=939.

Наконец я должен написать что-то вроде этого:

 <stroke android:width="3dp"
         android:color="#555555"
         />

 <padding android:left="1dp"
          android:top="1dp"
          android:right="1dp"
          android:bottom="1dp"
          /> 

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

Я должен указать android: bottomRightRadius = "2dp" для левого нижнего закругленного угла (еще одна ошибка здесь).

27 голосов
/ 08 мая 2013

Из документации :

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

Например, вы должны установить android: radius = "", чтобы иметь возможность делать то, что вы хотите:

<corners 
    android:radius="2dp"
    android:bottomRightRadius="0dp" 
    android:topRightRadius="0dp"/> 

ДругойGOTCHA, если вы делаете такие вещи, предварительный просмотр в Eclipse будет неправильным .Вы действительно должны запустить свое приложение, чтобы увидеть реальные результаты!

14 голосов
/ 17 июня 2010

Вы также можете использовать очень маленькие числа для своего радиуса ».

<corners 
  android:bottomRightRadius="0.1dp" android:bottomLeftRadius="2dp" 
 android:topLeftRadius="2dp" android:topRightRadius="0.1dp" />
9 голосов
/ 08 декабря 2014

для других есть решение для любого уровня API, вы можете поместить элемент поверх каждого другого примера:

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

<!-- my firt item with 4 corners radius(8dp)
 -->
    <item>
        <shape>
            <solid
                android:angle="270.0"
                android:color="#3D689A" />

            <corners android:topLeftRadius="8dp" />
        </shape>
    </item>
<!-- my second item is on top right for a fake corner radius(0dp)
 -->
    <item
        android:bottom="30dp"
        android:left="50dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>
<!-- my third item is on bottom left for a fake corner radius(0dp)
 -->
    <item
        android:right="50dp"
        android:top="30dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>

</layer-list>

результат с светлым цветом, чтобы показать вам три элемента:

enter image description here

окончательный результат:

enter image description here

С уважением.

6 голосов
/ 24 августа 2014

Эта ошибка зарегистрирована здесь . Это ошибка Android-устройств с уровнем API ниже 12. Вы должны поместить правильные версии ваших макетов в папку drawable-v12, которая будет использоваться для API уровня 12 или выше. И ошибочная версия (углы переключаются / меняются местами) того же макета будет помещена в папку для рисования по умолчанию, которая будет использоваться устройствами с уровнем API ниже 12.

Например: мне пришлось создать кнопку с закругленным углом внизу справа.

В папке 'drawable' - button.xml: Мне пришлось сделать нижний левый угол закругленным.

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>

В папке drawable-v12 - button.xml: Здесь размещена правильная версия макета для использования с API уровня 12 или выше.

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>
4 голосов
/ 23 декабря 2018

попробуйте

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/upkia"/>
<corners android:radius="10dp"
    android:topRightRadius="0dp"
    android:bottomRightRadius="0dp" />
</shape>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...