Chciałbym utworzyć takie same obramowanie tego LinearLayout, jak w przykładzie:
W tym przykładzie widzimy, że obramowanie nie jest takie samo na całym linearLayout. Jak mogę to utworzyć za pomocą pliku XML do rysowania?
Na razie udało mi się utworzyć prostą ramkę wokół LinearLayout w następujący sposób:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners
android:radius="1dp"
android:topRightRadius="0dp"
android:bottomRightRadius="0dp"
android:bottomLeftRadius="0dp" />
<stroke
android:width="1dp"
android:color="#E3E3E1" />
<solid android:color="@color/blanc" />
</shape>
android
border
android-linearlayout
wawanopoulos
źródło
źródło
background
do tego właściwości ... utwórz jeden plik XML z kształtem takim jak prostokąt, kolor i efekt cienia i ustaw go jako tło dla swojego układu liniowego ..Odpowiedzi:
Spróbuj tego..
źródło
"0dp"
z"1dp"
odpowiadając Hariharan użytkownika.<gradient>
w swoim,<shape>
aby wzmocnić efekt obramowania, a także, jeśli jest to naprawdę efekt, którego potrzebuje twój interfejs użytkownika, zamiast tylko obramowania w jednolitym kolorze.Dlatego istnieje CardView. CardView | Programiści Androida
To tylko FrameLayout, który obsługuje podniesienie uprawnień w urządzeniach typu pre-Lollipop.
Aby z tego skorzystać, musisz dodać zależność do
build.gradle
:źródło
Najlepsze rezultaty osiągam, używając grafiki z 9 patchami.
Możesz po prostu utworzyć indywidualną grafikę 9 łatek za pomocą następującego edytora: http://inloop.github.io/shadow4android/
Przykład:
Grafika z 9 patchami:
Wynik:
Źródło:
źródło
okej, wiem, że to już za późno. ale miałem te same wymagania. rozwiązałem w ten sposób
1. Najpierw utwórz plik xml (przykład: border_shadow.xml) w folderze „drawable” i skopiuj do niego poniższy kod.
2. teraz na układzie, w którym chcesz cień (przykład: LinearLayout), dodaj to w android: background
i to działało dla mnie.
źródło
To takie proste:
Utwórz plik do rysowania z gradientem takim jak ten:
dla cienia pod widokiem
below_shadow.xml
dla cienia nad widokiem
above_shadow.xml
i tak dalej dla prawego i lewego cienia po prostu zmień kąt gradientu :)
źródło
Alternatywnie możesz użyć obrazu z 9 wstawkami jako tła dla swojego układu, co pozwoli na bardziej „naturalne” cienie:
Wynik:
Umieść obraz w swoim
/res/drawable
folderze.Upewnij się, że rozszerzenie pliku to
.9.png
, a nie.png
Nawiasem mówiąc, jest to zmodyfikowany (zmniejszony do minimalnego rozmiaru kwadratowego) istniejący zasób znaleziony w folderze zasobów SDK API 19.
Zostawiłem czerwone znaczniki, ponieważ nie wydają się być szkodliwe, jak pokazano w narzędziu draw9patch.
[EDYTOWAĆ]
Około 9 łatek, na wypadek gdybyś nigdy nie miał z nimi nic wspólnego.
Po prostu dodaj go jako tło swojego widoku.
Obszary zaznaczone na czarno (lewy i górny) rozciągną się (pionowo, poziomo).
Obszary zaznaczone na czarno (prawy, dolny) definiują „obszar zawartości” (gdzie można dodać tekst lub widoki - jeśli chcesz, możesz nazwać nieoznaczone regiony „dopełnieniem”).
Samouczek: http://radleymarx.com/blog/simple-guide-to-9-patch/
źródło
Tworzysz plik .xml w drawable o nazwie drop_shadow.xml:
Następnie:
źródło
Użyj tej pojedynczej linii i miej nadzieję, że osiągniesz najlepszy wynik;
zastosowanie:
android:elevation="3dp"
Dostosuj rozmiar tak bardzo, jak potrzebujesz, i jest to najlepszy i najprostszy sposób na uzyskanie cieni, takich jak przyciski i inne domyślne cienie Androida. Daj mi znać, czy zadziałało!źródło
Jeśli masz już obramowanie z kształtu, po prostu dodaj wysokość:
źródło
1. Najpierw utwórz plik XML o nazwie shadow.xml w folderze „drawable” i skopiuj do niego poniższy kod.
Następnie dodaj listę warstw jako tło w swoim LinearLayout.
źródło
źródło
Wiem, że to późno, ale może to komuś pomóc.
Możesz użyć constraintLayout i dodać następującą właściwość w xml,
źródło
Znalazłem najlepszy sposób na rozwiązanie tego problemu.
Musisz ustawić jednolite prostokątne tło w układzie.
Użyj tego kodu -
ViewCompat.setElevation(view , value)
W nadrzędnym zestawie układów
android:clipToPadding="false"
źródło
ViewCompat.setElevation()
metody w klasie ViewCompat:public void setElevation(View view, float elevation) {}
. Jak widać, nie jest zaimplementowany. Naprawdę wątpię, żeby to pomogło i naprawdę zastanawiam się, czy rzeczywiście przetestowałeś swoją własną odpowiedź, lol