Chcę utworzyć kształt z lewym górnym zaokrąglonym rogiem i lewym dolnym zaokrąglonym rogiem:
<?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>
Ale powyższy kształt nie dał mi tego, czego chcę. Daje mi prostokąt bez zaokrąglonych rogów.
android
android-shape
user256239
źródło
źródło
Chociaż na to pytanie udzielono już odpowiedzi (jest to błąd powodujący odwrócenie bottomLeftRadius i bottomRightRadius), błąd został naprawiony w systemie Android 3.1 (api poziom 12 - testowany na emulatorze).
Tak więc, aby upewnić się, że twoje drawables wyglądają poprawnie na wszystkich platformach, powinieneś umieścić "poprawione" wersje drawables (tj. Gdzie dolny lewy / prawy promień jest rzeczywiście poprawny w xml) w folderze res / drawable-v12 twojej aplikacji. W ten sposób wszystkie urządzenia korzystające z wersji Androida> = 12 będą używać poprawnych plików do rysowania, podczas gdy urządzenia ze starszymi wersjami Androida będą używać elementów rysunkowych „obejścia”, które znajdują się w folderze res / drawables.
źródło
values/dimens.xml
pliku zawierającego odwrócone wartości bottom_left i bottom_right oraz nowegovalues-v12/dimens.xml
pliku, który ma poprawne wartości. W ten sposób możesz zachować tylko jedną wersję pliku XML do rysowania, a tylko wartość wymiaru jest zamieniana na podstawie wersji interfejsu API.Z dokumentacji :
Np. Musisz ustawić,
android:radius="<bigger than 1dp>"
aby móc robić to, co chcesz:<corners android:radius="2dp" android:bottomRightRadius="0dp" android:topRightRadius="0dp"/>
źródło
Możesz również użyć bardzo małych liczb dla swojego promienia ”.
<corners android:bottomRightRadius="0.1dp" android:bottomLeftRadius="2dp" android:topLeftRadius="2dp" android:topRightRadius="0.1dp" />
źródło
dla innych istnieją rozwiązania dla dowolnego poziomu API, możesz umieścić jeden element jeden na drugim przykład:
<?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>
wynik w jasnym kolorze, aby pokazać trzy elementy:
Wynik końcowy :
Z poważaniem.
źródło
Ten błąd został zgłoszony tutaj . Jest to błąd związany z urządzeniami z Androidem o poziomie API niższym niż 12. Musisz umieścić poprawne wersje swoich układów w folderze drawable-v12, który będzie używany na poziomie API 12 lub wyższym. Błędna wersja (rogi zamienione / odwrócone) tego samego układu zostanie umieszczona w domyślnym folderze do rysowania, który będzie używany przez urządzenia o poziomie API niższym niż 12.
Na przykład: musiałem zaprojektować przycisk z zaokrąglonym rogiem w prawym dolnym rogu.
W folderze „drawable” - button.xml: musiałem zaokrąglić lewy dolny róg.
<shape> <corners android:bottomLeftRadius="15dp"/> </shape>
W folderze 'drawable-v12' - button.xml: Tutaj została umieszczona poprawna wersja układu do wykorzystania na poziomie API 12 lub wyższym.
<shape> <corners android:bottomLeftRadius="15dp"/> </shape>
źródło
Spróbuj tego
<?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>
źródło