Jestem w stanie narysować granicę do układu liniowego, ale rysuje się ze wszystkich stron. Chcę ograniczyć to tylko do prawej strony, tak jak w CSS (border-right: 1px solid red;).
Próbowałem tego, ale nadal rysuje się ze wszystkich stron:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<stroke
android:height="2dp"
android:width="2dp"
android:color="#FF0000" />
<solid android:color="#000000" />
<padding
android:bottom="0dp"
android:left="0dp"
android:right="1dp"
android:top="0dp" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="5dp"
android:radius="1dp"
android:topLeftRadius="5dp"
android:topRightRadius="0dp" />
</shape>
</item>
Wszelkie sugestie, jak to osiągnąć?
BTW, nie chcę korzystać z włamania polegającego na umieszczeniu widoku o szerokości 1dp na wymaganej stronie.
Odpowiedzi:
Możesz użyć tego, aby uzyskać granicę po jednej stronie
EDYTOWANE
Ponieważ wielu włącznie ze mną chciało mieć jednostronną ramkę z przezroczystym tłem, wdrożyłem taką,
BorderDrawable
która mogłaby dać mi ramki o innym rozmiarze i kolorze w taki sam sposób, jak używamy css. Ale nie można tego użyć przez xml. Do obsługi XML dodałem plik,BorderFrameLayout
w którym można zawinąć twój układ.Zobacz mój github, aby uzyskać pełne źródło.
źródło
Łatwe jak ciasto, pozwalając na przezroczyste bg:
Zmień kąt, aby zmienić położenie granicy:
źródło
możliwe jest również zaimplementowanie tego, co chcesz, za pomocą pojedynczej warstwy
W ten sposób tylko lewa granica jest widoczna, ale można osiągnąć dowolną kombinację chcesz grając z
bottom
,left
,right
itop
atrybuty witem
elemencieźródło
Aby uzyskać ramkę tylko z jednej strony rysowalnego, nałóż negatyw
inset
na pozostałe 3 strony (powodując, że te granice zostaną narysowane poza ekranem).To podejście jest podobne do odpowiedzi naykah, ale bez użycia
layer-list
.źródło
insertX
u góry, aby zdecydować, które granice pokazać, a co nie.Alternatywnie (jeśli nie chcesz używać tła), możesz to łatwo zrobić, tworząc następujący widok:
Aby mieć tylko prawą ramkę, umieść ją za układem (tam, gdzie chcesz mieć ramkę):
Aby mieć tylko lewą ramkę, umieść ją przed układem (tam, gdzie chcesz mieć ramkę):
Pracował dla mnie ... Mam nadzieję, że to pomoże ...
źródło
Byłem w stanie osiągnąć efekt za pomocą następującego kodu
Możesz dostosować się do swoich potrzeb w zakresie położenia granicznego, zmieniając kierunek przemieszczenia
źródło
źródło
Kolejny świetny przykład
źródło
Nie ma tu mowy o plikach z dziewięcioma łatami . Tak, musisz utworzyć plik, jednak jest to dość łatwa robota i jest to naprawdę rozwiązanie „ obsługujące wiele wersji i obsługujące przezroczystość ”. Jeśli plik zostanie umieszczony w
drawable-nodpi
katalogu, działa wpx
oparciu, adrawable-mdpi
działa w przybliżeniu jako baza dp (dzięki resample).Przykładowy plik oryginalnego pytania ( obramowanie z prawej strony: 1px ciągłe czerwone; ) znajduje się tutaj:
http://ge.tt/517ZIFC2/v/3?c
Po prostu umieść go w
drawable-nodpi
katalogu.źródło
Granice różnych kolorów. Użyłem 3 przedmiotów.
źródło