web-dev-qa-db-fra.com

Quelles sont les nouvelles fonctionnalités de Android Design Support Library et comment utiliser sa Snackbar?

Android M Preview pour les développeurs a été publié hier. Comme d'habitude, de nombreuses nouvelles fonctionnalités étonnantes sont introduites. J'ai remarqué que Snackbar est l'un d'entre eux.

J'ai lu le document sur Snackbar, à partir duquel j'ai appris que Snackbar est dans la bibliothèque de Android Design Support Library, dont le chemin absolu est Android.support.design.widget.Snackbar .

Et le document dit que:

Les barres de collation fournissent une rétroaction légère sur une opération. Ils affichent un bref message en bas de l'écran sur mobile et en bas à gauche sur les gros appareils. Les barres de collation apparaissent au-dessus de tous les autres éléments à l'écran et un seul peut être affiché à la fois.

Ils disparaissent automatiquement après un délai d'attente ou après une interaction de l'utilisateur ailleurs sur l'écran, en particulier après des interactions qui invoquent une nouvelle surface ou activité. Les collations peuvent être glissées hors de l'écran.

Alors, Snackbar se comporte-t-il comme un Toast ou un Dialog? Les Snackbars peuvent-ils être utilisés dans un fichier de mise en page? Comment pourrais-je l'utiliser par programme?

P.S.:

  • Tout échantillon sur l'utilisation de Snackbar sera apprécié.
  • La bibliothèque de support de conception Android est une nouvelle bibliothèque de support, quelqu'un pourrait-il me montrer plus de détails sur cette bibliothèque?
34
SilentKnight

Quant à Snackbar, il agit comme un Toast mais est différent avec un Toast. Snackbars sont affichés en bas de l'écran et contiennent du texte avec une seule action facultative. Ils expirent automatiquement après la durée donnée en animant l'écran. De plus, les utilisateurs peuvent les faire glisser avant le délai d'attente, ce qui est considérablement plus puissant que les toasts, un autre mécanisme de rétroaction léger.

Vous pouvez l'utiliser par programme comme ceci:

Snackbar snackbar = Snackbar
  .make(parentLayout, R.string.snackbar_text, Snackbar.LENGTH_LONG)
  .setAction(R.string.snackbar_action, myOnClickListener);
snackbar.setActionTextColor(Color.CYAN);
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.YELLOW);//change Snackbar's background color;
TextView textView = (TextView)snackbarView .findViewById(Android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.BLUE);//change Snackbar's text color;
snackbar.show(); // Don’t forget to show!

Notez que l'utilisation d'une vue dans la méthode de make() - Snackbar tentera de la trouver pour s'assurer qu'elle est ancrée à son bas.

De plus, Android Design Support Library est utilisé pour Android 2.1+ (API 7 +), qui comprend vue du tiroir de navigation, étiquettes flottantes pour l'édition de texte, bouton d'action flottant, snackbar, tabs et quelque chose comme ça.

Vue de navigation

Le tiroir de navigation peut être un point focal important pour l'identité et la navigation dans votre application et la cohérence de la conception ici peut faire une différence considérable dans la facilité de navigation de votre application, en particulier pour les nouveaux utilisateurs. NavigationView rend cela plus facile en fournissant le cadre dont vous avez besoin pour le tiroir de navigation ainsi que la possibilité de gonfler vos éléments de navigation via une ressource de menu.

Vous pouvez l'utiliser comme ceci:

<Android.support.v4.widget.DrawerLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:app="http://schemas.Android.com/apk/res-auto"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:fitsSystemWindows="true">
    <!-- your content layout -->
    <Android.support.design.widget.NavigationView
            Android:layout_width="wrap_content"
            Android:layout_height="match_parent"
            Android:layout_gravity="start"
            app:headerLayout="@layout/drawer_header"
            app:menu="@menu/drawer"/>
</Android.support.v4.widget.DrawerLayout>

Quant au menu du tiroir, il pourrait être:

<group Android:checkableBehavior="single">
    <item
        Android:id="@+id/navigation_item_1"
        Android:checked="true"
        Android:icon="@drawable/ic_Android"
        Android:title="@string/navigation_item_1"/>
    <item
        Android:id="@+id/navigation_item_2"
        Android:icon="@drawable/ic_Android"
        Android:title="@string/navigation_item_2"/>
</group>

ou:

<item
    Android:id="@+id/navigation_subheader"
    Android:title="@string/navigation_subheader">
    <menu>
        <item
            Android:id="@+id/navigation_sub_item_1"
            Android:icon="@drawable/ic_Android"
            Android:title="@string/navigation_sub_item_1"/>
        <item
            Android:id="@+id/navigation_sub_item_2"
            Android:icon="@drawable/ic_Android"
            Android:title="@string/navigation_sub_item_2"/>
    </menu>
</item>

Vous obtiendrez des rappels sur les éléments sélectionnés en définissant un OnNavigationItemSelectedListener à l'aide de setNavigationItemSelectedListener (). Cela vous fournit le MenuItem sur lequel vous avez cliqué, vous permettant de gérer les événements de sélection, de modifier l'état vérifié, de charger le nouveau contenu, de fermer le tiroir par programmation ou toute autre action que vous souhaitez.

étiquettes flottantes pour l'édition de texte

Même l'humble EditText peut s'améliorer dans la conception des matériaux. Alors qu'un EditText seul masquera le texte de l'indice après avoir tapé le premier caractère, vous pouvez maintenant l'encapsuler dans un TextInputLayout, ce qui fera que le texte de l'indice deviendra un étiquette flottante au-dessus de EditText, garantissant que les utilisateurs ne perdent jamais le contexte dans ce qu'ils entrent. En plus d'afficher des astuces, vous pouvez également afficher un message d'erreur sous EditText en appelant setError().

Bouton d'action flottant

Un bouton d'action flottant est un bouton rond indiquant une action principale sur votre interface. FloatingActionButton de la bibliothèque de conception vous offre une implémentation cohérente unique, colorée par défaut en utilisant le colorAccent de votre thème.

Comme FloatingActionButton étend ImageView, vous utiliserez Android:src Ou l'une des méthodes telles que setImageDrawable() pour contrôler l'icône affichée dans le FloatingActionButton.

Onglets

le modèle de navigation de niveau supérieur est couramment utilisé pour organiser différents regroupements de contenu. La bibliothèque de conception TabLayout implémente les deux onglets fixes, où la largeur de la vue est divisée également entre tous les onglets, ainsi que les onglets déroulants, où les onglets ne sont pas de taille uniforme et peuvent défiler horizontalement.

Des onglets peuvent être ajoutés par programme:

TabLayout tabLayout = ...;
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));

Si vous souhaitez utiliser ViewPager pour la pagination horizontale entre les onglets, vous pouvez créer des onglets directement à partir de votre PagerAdapter’sgetPageTitle() puis connecter les deux ensemble à l'aide de setupWithViewPager(). Cela garantit que les événements de sélection d'onglets mettent à jour ViewPager et que les changements de page mettent à jour l'onglet sélectionné.

CoordinatorLayout et la barre d'application

la bibliothèque de conception présente CoordinatorLayout, une disposition qui offre un niveau supplémentaire de contrôle sur les événements tactiles entre les vues enfant, ce dont profitent de nombreux composants de la bibliothèque de conception. Si vous essayez d'utiliser un AppBarLayout permet à votre Toolbar et à d'autres vues (telles que les onglets fournis par TabLayout) de réagir aux événements de défilement dans une vue frère marquée d'un ScrollingViewBehavior. Par conséquent, vous pouvez créer une mise en page telle que:

<Android.support.design.widget.CoordinatorLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:app="http://schemas.Android.com/apk/res-auto"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

     <! -- Your Scrollable View -->
    <Android.support.v7.widget.RecyclerView
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <Android.support.design.widget.AppBarLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">
   <Android.support.v7.widget.Toolbar
                  ...
                  app:layout_scrollFlags="scroll|enterAlways">

        <Android.support.design.widget.TabLayout
                  ...
                  app:layout_scrollFlags="scroll|enterAlways">
     </Android.support.design.widget.AppBarLayout>
</Android.support.design.widget.CoordinatorLayout>

Désormais, lorsque l'utilisateur fait défiler le RecyclerView, le AppBarLayout peut répondre à ces événements en utilisant les drapeaux de défilement des enfants pour contrôler leur entrée (défilement à l'écran) et leur sortie (défilement hors écran).

La bibliothèque de conception, AppCompat et l'ensemble de la bibliothèque de support Android Android) sont des outils importants pour fournir les blocs de construction nécessaires à la construction d'une application moderne et élégante Android application sans tout construire à partir de zéro.

20
SilentKnight

Le nouveau Snackbar ne nécessite pas Android-M .

Il se trouve dans la nouvelle bibliothèque de support de conception et vous pouvez l'utiliser aujourd'hui.

Mettez simplement à jour votre SDK, ajoutez cette dépendance dans votre code:

compile 'com.Android.support:design:22.2.0'

Vous pouvez utiliser un code comme celui-ci:

Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG)
        .setAction("Action", null)
        .show();

C'est comme un toast.

enter image description here

Pour affecter une action , vous devez définir le OnClickListener.

Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG)
        .setAction("Action", myOnClickListener)
        .show();

Si vous souhaitez changer la couleur d'arrière-plan , vous pouvez utiliser quelque chose comme ceci:

 Snackbar snackbar = Snackbar.make(view, "Here's a Snackbar",       
                   Snackbar.LENGTH_LONG);
 View snackBarView = snackbar.getView();
 snackBarView.setBackgroundColor(colorId);
 snackbar.show();

enter image description here

Si vous souhaitez avoir des fonctionnalités intégrées comme le geste glisser-rejeter , ou le FAB faire défiler vers le haut de la barre de collation, ayant simplement un CoordinatorLayout dans votre hiérarchie de vues.

54

Sur Activity, vous pouvez utiliser:

String s = "SnackBar"
Snackbar.make(findViewById(Android.R.id.content), s, Snackbar.LENGTH_LONG).show();

et sur Fragment:

Snackbar.make(getView(), s, Snackbar.LENGTH_LONG).show();

Modifier:

Pour changer la couleur d'arrière-plan, j'utilise quelque chose comme ceci:

String s = "SnackBar"
Snackbar snack = Snackbar.make(getView(), s, Snackbar.LENGTH_LONG);
View view = snack.getView();
view.setBackgroundColor(Color.YELLOW); 
snack.show();

Et pour changer la couleur du texte (malgré le thème):

View view = snack.getView();
TextView tv = (TextView) view.findViewById(Android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.WHITE);

Fonctionne comme un charme ;-)

36

J'ai mis codeding

Snackbar snackbar = Snackbar
        .make(getView(), text, Snackbar.LENGTH_INDEFINITE);

View sbView = Global.alert.getView();
sbView.setBackgroundColor(0xFF000000);

TextView textView = (TextView) sbView.findViewById(Android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.WHITE);
textView.setTextSize(30);

Global.alert.show();
0
Pong Petrung
0
Anand Kumar

Snackbar est également capable d'afficher des icônes.

Par exemple: pour aucun réseau, vous pouvez afficher un snack-bar comme celui-ci (tout comme Gmail le fait).

SpannableStringBuilder builder = new SpannableStringBuilder();
    builder.append(" ").setSpan(new ImageSpan(this, R.drawable.snackbar_icon), 0, 1, 0);
    builder.append(" No Network Available");
    Snackbar snackBar = Snackbar.make(findViewById(R.id.co_ordinate), builder, Snackbar.LENGTH_LONG);
    snackBar.setAction("RETRY", new View.OnClickListener() {
        @Override
        public void onClick(View v) { //Retry Code here 

        }
    });
    snackBar.show();
0
Neo

vous pouvez également changer la couleur du texte et l'arrière-plan du snack-bar

 Snackbar snackbar = Snackbar.make(view, "Text",
                            Snackbar.LENGTH_LONG);
                    View snackBarView = snackbar.getView();
                    TextView tv = (TextView) snackBarView.findViewById(Android.support.design.R.id.snackbar_text);
                    tv.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.colorAccent));
                    snackBarView.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.colorPrimaryDark));
                    snackbar.show();
0
Jatin Devani