Mam LinearLayout
że mam stylem wyglądać jak button
i zawiera kilka elementów text / ImageView. Chciałbym, żeby cały LinearLayout
akt wyglądał jak a button
, w szczególności aby nadać mu stany zdefiniowane w a, aby po naciśnięciu miał inne tło.
Czy jest lepszy sposób niż ImageButton
całkowite określenie rozmiaru całego układu i pozycjonowanie?
android
android-layout
Jason Prado
źródło
źródło
LinearLayout
jak aToggleButton
Odpowiedzi:
Właśnie napotkałem ten problem. Musisz ustawić LinearLayout tak, aby był klikalny. Możesz to zrobić w XML za pomocą
Lub w kodzie z
Twoje zdrowie!
źródło
android:clickable="false"
, aby zapobiec blokowaniu kliknięć.Jeśli chcesz dodać domyślne zachowanie systemu Android w tle, aby
Layout
działał jak „klikalny”View
, ustaw na docelowymLayout
:API 11+ (czysty Android):
API 7+ (biblioteka wsparcia Android + AppCompat):
Dowolny interfejs API:
Odpowiedzi powyżej są nadal prawdziwe, ale nie pomogły mi po prostu dodać domyślny stan wciśniętego i zwolnionego interfejsu użytkownika (jak
ListView
na przykład).źródło
Użyłem pierwszej i drugiej odpowiedzi. Ale mój układ liniowy zawiera obrazy i tekst z kolorem tła, więc musiałem zmienić „tło” na „pierwszy plan”
układ liniowy
źródło
Najpierw będziesz chciał, aby selektor definiował różne stany. Na przykład w pliku XML:
Nie próbowałem tego, ale prawdopodobnie możesz ustawić android: background LinearLayout na ten selektor i ustawić android: klikalne na true i zadziała.
Jeśli tak się nie stanie, możesz przełączyć się na używanie RelativeLayout i ustawić pierwszy element jako przycisk z tym selektorem jako tłem i fill_parent dla jego szerokości i wysokości układu. W takim przypadku użyj zwykłego przycisku i ustaw android: background na swój selektor. Nie musisz umieszczać tekstu na swoim przycisku.
źródło
Button
. Możesz nadpisać,onDraw(Canvas)
aby zrobić wszystko, czego potrzebujesz (np. Narysować obrazy lub tekst w przycisku).W aplikacji, w której pracuję, muszę dynamicznie utworzyć LinearLayout. W tym przypadku polecenie
nie działa tak, jak powinien. Chociaż mogę coś przeoczyć, udało mi się wykorzystać setOnTouchListener, aby uzyskać ten sam wynik i przesyłam kod na wypadek, gdyby ktoś miał takie same potrzeby.
Poniższy kod tworzy LinearLayout z dwoma tekstami i zaokrąglonymi rogami, zmieniając kolor po naciśnięciu.
Najpierw utwórz dwa pliki xml w folderze do rysowania, jeden dla normalnego, a drugi dla wciśniętego stanu linearlayout.
XML stanu normalnego (drawable / rounded_edges_normal.xml)
Stan wciśnięty xml (drawable / rounded_edges_pressed.xml). Jedyną różnicą jest kolor ...
Następnie poniższy kod wykonuje zadanie
Zmienna globalna:
W
onCreate()
:źródło
Po prostu ustaw te atrybuty
źródło
Po prostu dodaj tło attr / selectableItemBackground do układu liniowego, a także spraw, aby ten układ liniowy był klikalny
przykład:
To sprawia, że linearlayout działa jak przycisk po naciśnięciu. :)
źródło
Było to pomocne, ale jeśli chcesz umieścić kolor tła i sprawić, by układ liniowy był klikalny, tak jak element listy. Ustaw tło z preferowanym kolorem i ustaw kolor pierwszego planu na? Android: attr / selectableItemBackground, ustaw fokus na true i klikalny true
przykładowy kod
źródło
Poprzednie odpowiedzi dotyczyły tego, jak ustawić domyślne tło w pliku xml. Tutaj to samo w kodzie:
źródło