Właśnie sprawdzałem wytyczne projektowe i zastanawiałem się nad przyciskami bez obramowania. Wytrzeszczyłem oczy i próbowałem znaleźć w źródle, ale nie mogę sam tego zebrać. Czy to normalny widżet Przycisk, ale dodajesz niestandardowy (domyślny dla Androida) styl? Jak zrobić te przyciski bez obramowania (oczywiście możesz ustawić puste tło, ale wtedy nie mam separatora)?
Tutaj linki do wytycznych projektowych:
android
layout
button
borderless
KarlKarlsom
źródło
źródło
Odpowiedzi:
Aby usunąć zamieszanie:
Odbywa się to w 2 krokach: Ustawienie atrybutu tła przycisku na android: attr / selectableItemBackground tworzy przycisk z informacją zwrotną, ale bez tła.
Linia oddzielająca przycisk bez obramowania od reszty układu jest tworzona przez widok z tłem android: attr / dividerVertical
Dla lepszego zrozumienia jest tutaj układ kombinacji przycisków OK / Anuluj bez obramowania u dołu ekranu (jak na prawym obrazku powyżej).
źródło
?android:attr/selectableItemBackground
na?attr/selectableItemBackground
i?android:attr/dividerVertical
na?attr/dividerVertical
?android:attr/dividerVerticalfor
a?attr/dividerVertical
także działa na absPo prostu dodaj następujący atrybut stylu do swojego
Button
tagu:źródło: http://developer.android.com/guide/topics/ui/controls/button.html#Borderless
Następnie możesz dodać separatory, tak jak w odpowiedzi Karla .
źródło
Późna odpowiedź, ale wiele opinii. Ponieważ API <11 jeszcze nie umarły, dla zainteresowanych jest to sztuczka.
Niech twój pojemnik uzyska pożądany kolor (może być przezroczysty). Następnie nadaj przyciskom selektor z domyślnym przezroczystym kolorem i pewnym kolorem po naciśnięciu. W ten sposób będziesz mieć przezroczysty przycisk, ale po naciśnięciu zmieni kolor (jak hologramy). Możesz także dodać animację (np. Hologramy). Selektor powinien wyglądać mniej więcej tak:
A przycisk powinien mieć
android:background="@drawable/selector_transparent_button"
PS: pozwól kontenerowi mieć separatory (
android:divider='@android:drawable/...
dla API <11)PS [Newbies]: powinieneś zdefiniować te kolory w values / colors.xml
źródło
API Level 10
iAPI Level > 10
!Dla tych, którzy chcą przyciski bez obramowania, ale nadal są animowane po kliknięciu. Dodaj to w przycisku.
Jeśli chcesz, aby między nimi była dzielnica / linia. Dodaj to w układzie liniowym.
Podsumowanie
źródło
Aby uzyskać styl materiału, dodaj
style="@style/Widget.AppCompat.Button.Borderless"
podczas korzystania z biblioteki AppCompat.źródło
Ze źródła aplikacji na iOS wymyśliłem tę
ButtonBar
klasę:Będzie to miejsce
LinearLayout
, do którego trafiają przyciski „OK” i „Anuluj” i zajmą się umieszczaniem ich w odpowiedniej kolejności. Następnie umieść to w układzie, w którym chcesz umieścić przyciski:Daje to wygląd okna dialogowego z przyciskami bez obramowania. Możesz znaleźć te atrybuty w res we frameworku.
buttonBarStyle
wykonuje pionowy separator i dopełnienie.buttonBarButtonStyle
jest ustawiony jakborderlessButtonStyle
motyw Holo, ale uważam, że powinien to być najpewniejszy sposób wyświetlania go, ponieważ struktura chce go wyświetlić.źródło
Spojrzenie na temat atrybutów
buttonBarStyle
,buttonBarButtonStyle
orazborderlessButtonStyle
.źródło
buttonBarButtonStyle
, otrzymuję wyjątekE/AndroidRuntime(17134): Caused by: java.lang.reflect.InvocationTargetException E/AndroidRuntime(17134): Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x1030281 a=2 r=0x1030281}
Nie mam pojęcia dlaczego, ale używanieselectableItemBackground
działa cuda.Możesz również uczynić przyciski bez obramowania za pomocą kodu:
źródło
android.R.attr.selectableItemBackground
wymaga API 21. Jakieś pomysły, jak to zrobić we wcześniejszych wersjach?Dla tych, którzy chcą programowo utworzyć przycisk bez obramowania dla API> = 8
źródło
Innym rozwiązaniem, które powinno działać zarówno na starszej, jak i nowszej platformie Android, jest użycie
atrybut dla widoku przycisku. Ale po dodaniu powyższej linii przycisk nie zapewni reakcji na dotyk.
Aby zapewnić reakcję dotykową, dodaj następujący kod do klasy Activity
Dla mnie działa dobrze.
źródło
case MotionEvent.ACTION_CANCEL:
poniżejcase MotionEvent.ACTION_UP:
.Dla każdego, kto wciąż szuka:
odziedzicz własny styl pasków przycisków Holo:
lub Holo Light:
a dla przycisków Holo bez obramowania:
lub Holo Light:
źródło
W ten sposób programistycznie tworzysz przycisk bez obramowania (płaski) bez użycia XML
źródło
ContextThemeWrapper myContext = new ContextThemeWrapper(this.getActivity(), R.style.Widget_AppCompat_Button_Borderless_Colored); Button myButton = new Button(myContext);
i to nie zadziała. Po dodaniu drugiego i trzeciego parametru działa!Użyj poniższego kodu w pliku xml. Użyj android: background = "# 00000000", aby uzyskać przezroczysty kolor.
źródło
Możesz użyć biblioteki obsługi AppCompat dla przycisku bez obramowania.
Możesz utworzyć przycisk bez obramowania w następujący sposób:
Możesz utworzyć kolorowy przycisk bez obramowania w następujący sposób:
źródło
Z jakiegoś powodu
style="Widget.Holo.Button.Borderless"
aniandroid:background="?android:attr/selectableItemBackground"
dla mnie, ani dla mnie nie działały. Mówiąc dokładniej,Widget.Holo.Button.Borderless
wykonałem zadanie na Androidzie 4.0, ale nie działało na Androidzie 2.3.3. Jaki był dla mnie trick w obu wersjachandroid:background="@drawable/transparent"
i ten XML w res / drawable / transparent.xml:Prosta głowa przez podejście do ściany.
źródło
android:background="?android:attr/dividerVertical"
sztuczka.Świetny pokaz slajdów pokazujący, jak osiągnąć pożądany efekt od Googles Nick Butcher (zacznij od slajdu 20). Używa standardowego Androida
@attr
do stylizacji przycisku i rozdzielacza.źródło
Dodając do pierwszej odpowiedzi, możesz także użyć widoków z ciemnoszarym tłem w układzie liniowym, takim jak ten.
Jeśli twoja linia jest pozioma, będziesz chciał ustawić wysokość na 1dip i szerokość tak, aby pasowała do rodzica i odwrotnie, jeśli twoja linia jest pionowa.
źródło
Jeśli chcesz osiągnąć to samo programowo:
(to jest C #, ale łatwo można przetłumaczyć na Javę)
Mecz
źródło
Wypróbuj ten kod, aby programowo usunąć tło do rysowania (@ drawable / bg), po prostu musimy podać wartość null jako parametr.
źródło