Comment créer des boutons Borderless standard (comme dans les directives de conception mentionnées)?

Je vérifiais simplement les directives de conception et je me demandais quels étaient les boutons sans bordure. J’ai goggled et essayé de trouver dans la source mais ne peux pas le rassembler par moi-même. Est-ce le widget bouton normal mais vous ajoutez un style personnalisé (Android par défaut)? Comment faire ces boutons sans frontières (bien sûr, vous pouvez définir l’arrière-plan pour le vider, mais alors je n’ai pas le diviseur)?

Voici des liens vers les directives de conception:

  • http://developer.android.com/design/building-blocks/buttons.html
  • http://developer.android.com/guide/topics/ui/controls/button.html#Borderless

entrer la description de l'image ici

Pour effacer une certaine confusion:

Cela se fait en 2 étapes: Définir l’atsortingbut d’arrière-plan du bouton sur Android: attr / selectableItemBackground vous crée un bouton avec des commentaires mais pas d’arrière-plan.

android:background="?android:attr/selectableItemBackground" 

La ligne pour diviser le bouton sans bordure du rest de votre mise en page se fait par une vue avec l’arrière-plan Android: attr / dividerVertical

 android:background="?android:attr/dividerVertical" 

Pour une meilleure compréhension, voici une mise en page pour une combinaison de boutons OK / Annuler sans bordure au bas de votre écran (comme dans l’image ci-dessus).

       

Ajoutez simplement l’atsortingbut de style suivant dans votre balise Button :

  style="?android:attr/borderlessButtonStyle" 

source: http://developer.android.com/guide/topics/ui/controls/button.html#Borderless

Ensuite, vous pouvez append des diviseurs comme dans la réponse de Karl .

Réponse tardive, mais beaucoup de points de vue. Comme les API <11 ne sont pas encore mortes, pour ceux que cela intéresse, voici une astuce.

Laissez votre conteneur avoir la couleur souhaitée (peut être transparent). Donnez ensuite à vos boutons un sélecteur avec une couleur transparente par défaut et un peu de couleur lorsque vous appuyez dessus. De cette façon, vous aurez un bouton transparent, mais changera de couleur en appuyant dessus (comme les holo). Vous pouvez également append des animations (comme celles d’Holo). Le sélecteur devrait être quelque chose comme ceci:

 res/drawable/selector_transparent_button.xml      

Et le bouton devrait avoir android:background="@drawable/selector_transparent_button"

PS: laissez vous contenir les diviseurs ( android:divider='@android:drawable/... pour API <11)

PS [Newbies]: vous devez définir ces couleurs dans les valeurs / colors.xml

Pour celui qui veut des boutons sans frontières mais toujours animés quand on clique dessus. Ajoutez ceci dans le bouton.

 style="?android:attr/borderlessButtonStyle" 

Si vous vouliez un séparateur / ligne entre eux. Ajoutez ceci dans la disposition linéaire.

 style="?android:buttonBarStyle" 

Résumé

     

Pour le style de matériau, ajoutez style="@style/Widget.AppCompat.Button.Borderless" lors de l’utilisation de la bibliothèque AppCompat.

Depuis la source de l’application iosched, j’ai créé cette classe ButtonBar :

 /** * An extremely simple {@link LinearLayout} descendant that simply reverses the * order of its child views on Android 4.0+. The reason for this is that on * Android 4.0+, negative buttons should be shown to the left of positive buttons. */ public class ButtonBar extends LinearLayout { public ButtonBar(Context context) { super(context); } public ButtonBar(Context context, AtsortingbuteSet atsortingbutes) { super(context, atsortingbutes); } public ButtonBar(Context context, AtsortingbuteSet atsortingbutes, int def_style) { super(context, atsortingbutes, def_style); } @Override public View getChildAt(int index) { if (_has_ics) // Flip the buttons so that "OK | Cancel" becomes "Cancel | OK" on ICS return super.getChildAt(getChildCount() - 1 - index); return super.getChildAt(index); } private final static boolean _has_ics = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; } 

Ce sera le LinearLayout lequel LinearLayout les LinearLayout “OK” et “Cancel” et se chargeront de les placer dans l’ordre approprié. Ensuite, mettez ceci dans la mise en page que vous voulez que les boutons:

        

Cela vous donne l’apparence de la boîte de dialog avec des boutons sans bordure. Vous pouvez trouver ces atsortingbuts dans le res dans le framework. buttonBarStyle fait le diviseur et le remplissage vertical. buttonBarButtonStyle est défini comme buttonBarButtonStyle pour le thème Holo, mais je pense que cela devrait être le moyen le plus robuste pour l’afficher lorsque le framework veut l’afficher.

Regardez dans les atsortingbuts de thème buttonBarStyle , buttonBarButtonStyle et buttonBarButtonStyle .

Vous pouvez également créer des boutons sans marge via du code:

 TypedValue value= new TypedValue(); getApplicationContext().getTheme().resolveAtsortingbute(android.R.attr.selectableItemBackground, value, true); myButton.setBackgroundResource(value.resourceId); 

Pour ceux qui veulent créer un bouton sans bordure par programmation pour les API> = 8

 ImageButton smsImgBtn = new ImageButton(this); //Sets a drawable as the content of this button smsImgBtn.setImageResource(R.drawable.message_icon); //Set to 0 to remove the background or for bordeless button smsImgBtn.setBackgroundResource(0); 

Une autre solution qui devrait fonctionner à la fois sur les anciennes et les plus récentes plates-formes Android est d’utiliser

 android:background="@android:color/transparent" 

atsortingbut pour la vue Button. Mais après l’ajout au-dessus du bouton de ligne ne fournira pas de retour tactile.

Pour fournir une rétroaction tactile, ajoutez le code suivant à la classe d’activité

 button.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: ((Button)view).setBackgroundColor(Color.LTGRAY); break; case MotionEvent.ACTION_UP: ((Button)view).setBackgroundColor(Color.TRANSPARENT); } return false; } }); 

Son fonctionne bien pour moi.

Pour quiconque recherche encore:

héritez de votre propre style pour les boutons Holo:

  

ou Holo Light:

  

et pour les boutons Holo sans bordure:

  

ou Holo Light:

  

Utilisez le code ci-dessous dans votre fichier XML. Utilisez android: background = “# 00000000” pour avoir la couleur transparente.

  

Vous pouvez utiliser AppCompat Support Library pour Borderless Button.

Vous pouvez créer un bouton sans bordure comme ceci:

  

Vous pouvez créer des boutons colorés sans bordure comme ceci:

  

C’est ainsi que vous créez un bouton sans bordure (à plat) par programmation sans utiliser XML

 ContextThemeWrapper myContext = new ContextThemeWrapper(this.getActivity(), R.style.Widget_AppCompat_Button_Borderless_Colored); Button myButton = new Button(myContext, null, R.style.Widget_AppCompat_Button_Borderless_Colored); 

Pour une raison quelconque, ni style="Widget.Holo.Button.Borderless" ni android:background="?android:attr/selectableItemBackground" fonctionné pour moi. Pour être plus précis, Widget.Holo.Button.Borderless fait le travail sur Android 4.0 mais n’a pas fonctionné sur Android 2.3.3. Ce qui a fait l’affaire pour moi sur les deux versions était android:background="@drawable/transparent" et ce XML dans res / drawable / transparent.xml:

   

Tête simple à travers l’approche du mur.

Un superbe diaporama sur la façon d’obtenir l’effet désiré avec Google Butcher Nick (commencez à la diapositive 20). Il utilise la norme Android @attr pour @attr le bouton et le diviseur.

En ajoutant à la réponse supérieure, vous pouvez également utiliser des vues avec une couleur d’arrière-plan gris foncé dans une disposition linéaire comme celle-ci.

       

Si votre ligne est horizontale, vous devez définir la hauteur sur 1dip et la largeur sur le parent et inversement si votre ligne est verticale.

Si vous voulez obtenir le même résultat par programme:

(ceci est C # mais facilement transférable à Java)

 Button button = new Button(new ContextThemeWrapper(Context, Resource.Style.Widget_AppCompat_Button_Borderless_Colored), null, Resource.Style.Widget_AppCompat_Button_Borderless_Colored); 

Rencontre

   
 Button btn= new Button(this); btn.setText("HI"); btn.setBackground(null);