Próbuję ustawić dopełnienie w <shape>
zadeklarowanym w pliku / układzie XML. Ale cokolwiek ustawię, nic się nie zmienia w odniesieniu do wypełnienia. Jeśli zmodyfikuję jakiekolwiek inne właściwości, zobaczę efekty w interfejsie użytkownika. Ale to nie działa z wyściółką. Czy mógłbyś doradzić, jakie są możliwe przyczyny takiego stanu rzeczy?
Oto kształt XML, który próbuję stylizować:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="1dp"
android:color="#ffffff"
android:dashWidth="2dp"/>
<solid android:color="@color/button_white_cover"/>
<corners android:radius="11dp"/>
<padding android:left="1dp"
android:top="20dp"
android:right="20dp"
android:bottom="2dp"/>
</shape>
źródło
<item>
akceptuje rysunki podrzędne (chociaż nie jest to wyraźnie udokumentowane). W ten sposób możesz osiągnąć to zachowanie w pojedynczym pliku XML.<shape><padding>
za ?Jak kilka uwag nie wspomniał, najlepszym rozwiązaniem jest, aby zawinąć
<shape>
w<item>
elemencie i ustawić dopełnienie tam zamiast. Istnieją jednak inne dostępne opcje, które są szczegółowo opisane w linku poniżej. na przykład<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:left="8dp" android:right="8dp" android:top="8dp" android:bottom="8dp"> <shape android:shape="rectangle"> ... </shape> </item> </layer-list>
W zależności od potrzeb, zamiast używać listy warstw, możesz użyć dowolnego z następujących typów do rysowania:
Aby uzyskać więcej informacji o dostępnych typach do rysowania, zobacz tę dokumentację systemu Android
Źródła:
źródło
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
Możesz wypróbować wstawki:
<?xml version="1.0" encoding="UTF-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetBottom="2dp" android:insetLeft="1dp" android:insetRight="20dp" android:insetTop="20dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="#ffffff" android:dashWidth="2dp" /> <solid android:color="@color/button_white_cover" /> <corners android:radius="11dp" /> </shape> </inset>
źródło
Odpowiedź Lyobomyr działa, ale tutaj zastosowano to samo rozwiązanie, ale bez narzutu związanego z tworzeniem nowego elementu rysunkowego, co minimalizuje bałagan w pliku:
https://stackoverflow.com/a/3588976/578746
Skopiuj / wklej anwser przez anon na odpowiedź SO powyżej:
<item android:left="6dp" android:right="6dp"> <shape android:shape="rectangle"> <gradient android:startColor="#ccd0d3" android:centerColor="#b6babd" android:endColor="#ccd0d3" android:height="1px" android:angle="0"/> </shape> </item>
źródło
Rozwiązałem ten problem w ten sposób:
<shape android:shape="oval" > <stroke android:width="4dp" android:color="@android:color/transparent" /> <solid android:color="@color/colorAccent" /> </shape>
właśnie dodałem do niego przezroczysty obrys.
źródło