2010-06-16 2 views
62

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

<?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> 

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

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

Спасибо.

ответ

35

Похож на ошибку 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"/> 

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

+1

Да, я могу подтвердить ваше последнее заявление/ошибку, что слева и справа там. Я тоже испытал то же самое в своем приложении. (sdk 2.1). Вы уже зарегистрировали отчет об ошибке на b.android.com или уже сообщили об этом? –

+3

Я только что зарегистрировал ошибку, http://code.google.com/p/android/issues/detail?id=9161. Печально то, что после исправления ошибки я снова должен изменить свой код :( – user256239

13

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

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

это был первый, который я пробовал ... но не надеюсь ... я тестирую Android 2.2 ... Любые другие идеи ... Спасибо –

53

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

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

+0

В этой точной проблеме сегодня. Какая неприятная ошибка. – onit

+0

+1 Спасибо, что очень полезен для меня. – Praveenkumar

+5

Это должно быть принято как ответ – Abx

21

Из documentation:

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

E.g. вы должны установить Android: радиус = «», чтобы иметь возможность делать то, что вы хотите:

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

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

+0

Просто хотел указать в eclipse 3.7.2, просмотр выглядит отлично для меня. – kyle

3

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

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

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

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

В папке «рисуем-v12» - button.xml: Правильная версия макета была помещена здесь, чтобы использовать для уровня API 12 или выше.

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

для других есть решение для любого уровня 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

С уважением.

+0

Спасибо большое :) –

Смежные вопросы