J'ai un LinearLayout
style que j'ai stylé pour ressembler à un button
, et il contient quelques éléments text / ImageView. Je voudrais faire en sorte que l'ensemble LinearLayout
agisse comme un button
, en particulier pour lui donner des états qui sont définis dans un afin qu'il ait un arrière-plan différent lorsqu'il est enfoncé.
Y a-t-il un meilleur moyen que de faire une ImageButton
taille de la mise en page entière et le positionnement absolument?
android
android-layout
Jason Prado
la source
la source
LinearLayout
comme unToggleButton
Réponses:
Je suis tombé sur ce problème tout à l'heure. Vous devrez définir LinearLayout sur cliquable. Vous pouvez soit le faire dans le XML avec
Ou en code avec
À votre santé!
la source
android:clickable="false"
pour éviter qu'il ne bloque les événements de clic.Si vous souhaitez ajouter le comportement d'arrière-plan par défaut d'Android pour créer des
Layout
actes comme un "clikable"View
, définissez sur la cibleLayout
:API 11+ (Android pur):
API 7+ (bibliothèque de support Android + AppCompat):
Toute API:
Les réponses ci-dessus sont toujours vraies mais ne m'ont pas aidé pour simplement ajouter l'état de l'interface utilisateur par défaut enfoncé et libéré (comme dans un
ListView
exemple).la source
J'ai utilisé la première et la deuxième réponse. Mais ma disposition linéaire contient des images et du texte avec une couleur d'arrière-plan, j'ai donc dû changer "arrière-plan" en "premier plan"
linéaire
la source
Vous aurez d'abord besoin d'un sélecteur pour définir les différents états. Par exemple, dans un fichier XML:
Je ne l'ai pas essayé, mais vous pouvez éventuellement définir android: background de LinearLayout sur ce sélecteur, et définir android: clickable sur true et cela fonctionnera.
Si ce n'est pas le cas, vous pouvez passer à l'utilisation d'un RelativeLayout et faire du premier élément un bouton avec ce sélecteur en arrière-plan et fill_parent pour sa largeur et sa hauteur de disposition. Dans ce cas, utilisez simplement un bouton standard et définissez android: background sur votre sélecteur. Vous n'êtes pas obligé de mettre du texte sur votre bouton.
la source
Button
. Vous pouvez remplaceronDraw(Canvas)
pour faire toutes les choses spéciales dont vous avez besoin (par exemple, dessiner des images ou du texte dans le bouton).Dans l'application sur laquelle je travaille, j'ai besoin de créer un LinearLayout de manière dynamique. Dans ce cas, la commande
ne fonctionne pas comme prévu. Bien que je puisse manquer quelque chose, j'ai réussi à exploiter setOnTouchListener pour obtenir le même résultat et je soumets le code au cas où quelqu'un aurait les mêmes besoins.
Le code suivant crée un LinearLayout avec deux vues de texte et des coins arrondis, changeant de couleur lorsque vous appuyez sur.
Tout d'abord, créez deux fichiers xml dans un dossier dessinable, un pour l'état normal et un pour l'état de disposition linéaire pressé.
XML à l'état normal (drawable / round_edges_normal.xml)
Etat pressé xml (drawable / round_edges_pressed.xml). La seule différence réside dans la couleur ...
Ensuite, le code suivant fait le travail
Variable globale:
Dans
onCreate()
:la source
Définissez simplement ces attributs
la source
Ajoutez simplement un arrière-plan attr / selectableItemBackground à la disposition linéaire et rendez également cette disposition linéaire cliquable
exemple :
Cela permet à la disposition linéaire d'agir comme un bouton lorsqu'elle est enfoncée. :)
la source
Cela a été utile, mais si vous souhaitez mettre une couleur d'arrière-plan et rendre la mise en page linéaire cliquable comme l'élément de liste. Définissez l'arrière-plan avec votre couleur préférée et définissez la couleur de premier plan sur? Android: attr / selectableItemBackground, définissez focusable true et clickable true
exemple de code
la source
Les réponses précédentes portaient sur la façon de définir l'arrière-plan par défaut dans un fichier xml. Voici la même chose dans le code:
la source