왼쪽 상단이 둥근 모서리와 왼쪽 하단이 둥근 모서리로 모양을 만드는 방법은 무엇입니까?


84

왼쪽 상단 모서리가 둥근 모서리와 왼쪽 하단 모서리가 둥근 모양을 만들고 싶습니다.

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

그러나 위의 모양은 내가 원하는 것을 얻지 못했습니다. 둥근 모서리가없는 직사각형을 제공합니다.

답변:


62

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"를 지정해야합니다 (여기에 또 다른 버그).


1
예, 왼쪽 / 오른쪽으로 전환 된 마지막 진술 / 버그를 확인할 수 있습니다. 내 앱에서도 같은 경험을했습니다. (sdk 2.1). 이미 b.android.com에 버그 보고서를 제출 했습니까? 아니면 이미보고 되었습니까?
Mathias Conradt

3
방금 버그를 신고했습니다 ( code.google.com/p/android/issues/detail?id=9161) . 슬픈 것은 그들이 버그를 수정 한 후, 나는 :( 다시 코드를 변경해야한다
user256239

58

이 질문은 이미 답변되었지만 (bottomLeftRadius 및 bottomRightRadius가 반전되는 버그),이 버그는 android 3.1 (api 레벨 12-에뮬레이터에서 테스트 됨)에서 수정되었습니다.

따라서 드로어 블이 모든 플랫폼에서 올바르게 보이도록하려면 앱의 res / drawable-v12 폴더에 드로어 블의 "수정 된"버전 (즉, xml에서 왼쪽 / 오른쪽 하단 반경이 실제로 올바른 위치)을 넣어야합니다. 이렇게하면 Android 버전> = 12를 사용하는 모든 기기는 올바른 드로어 블 파일을 사용하고, 이전 버전의 Android를 사용하는 기기는 res / drawables 폴더에있는 "해결 방법"드로어 블을 사용합니다.


4
또 다른 옵션은 values/dimens.xml반전 된 bottom_left 및 bottom_right 값이 포함 된 기본 파일과 올바른values-v12/dimens.xml이 있는 새 파일을 사용하는 것 입니다. 이렇게하면 드로어 블 XML 파일의 단일 버전 만 유지할 수 있으며 API 버전에 따라 dimen 값만 교체됩니다.
Joe

35

로부터 문서 :

참고 : 모든 모서리는 (처음에) 1보다 큰 모서리 반경을 제공해야합니다. 그렇지 않으면 모서리가 둥글 지 않습니다. 특정 모서리를 둥글게하지 않으려면 해결 방법은 android : radius를 사용하여 기본 모서리 반경을 1보다 크게 설정 한 다음 각 모서리를 원하는 값으로 재정의하고 0 ( "0dp")을 제공하는 것입니다. ) 둥근 모서리를 원하지 않는 곳.

예를 들어 android:radius="<bigger than 1dp>"원하는 것을 할 수 있도록 설정 해야합니다.

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

14

반경에 매우 작은 숫자를 사용할 수도 있습니다. '

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

... 감사합니다 그 첫 번째 내가 시도했다 ... 그러나 희망은 .... 내가 안드로이드 2.2 ... 다른 아이디어를 테스트하지거야
아미르 샤에게

12

다른 경우에는 모든 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>

세 가지 항목을 보여주는 밝은 색상의 결과 :

여기에 이미지 설명 입력

최종 결과 :

여기에 이미지 설명 입력

친애하는.


8

이 버그는 여기에 있습니다 . 이것은 API 레벨이 12 미만인 Android 기기의 버그입니다. 올바른 버전의 레이아웃을 API 레벨 12 이상에 사용될 drawable-v12 폴더에 넣어야합니다. 그리고 동일한 레이아웃의 잘못된 버전 (코너 전환 / 반전)은 API 수준이 12 미만인 장치에서 사용할 기본 드로어 블 폴더에 저장됩니다.

예 : 오른쪽 하단에 둥근 모서리가있는 버튼을 디자인해야했습니다.

'drawable'폴더-button.xml : 왼쪽 하단 모서리를 둥글게 만들어야했습니다.

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

'drawable-v12'폴더-button.xml : API 레벨 12 이상에서 사용할 수 있도록 올바른 버전의 레이아웃이 여기에 배치되었습니다.

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

7

이 시도

<?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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.