Android M Preview für Entwickler wurde gestern veröffentlicht. Wie üblich werden viele erstaunliche neue Funktionen eingeführt. Mir ist aufgefallen, dass Snackbar
einer von ihnen ist.
Ich habe das Dokument über Snackbar
gelesen, aus dem ich erfuhr, dass sich Snackbar in der Bibliothek von Android Design Support Library befindet, deren absoluter Pfad Android.support.design.widget.Snackbar
.
Und das Dokument sagt, dass:
Snackbars geben ein leichtes Feedback zu einer Operation. Sie zeigen eine kurze Meldung am unteren Bildschirmrand auf Mobilgeräten und bei größeren Geräten links unten an. Snackbars werden über allen anderen Elementen auf dem Bildschirm angezeigt und es kann immer nur eines angezeigt werden.
Sie verschwinden automatisch nach einer Zeitüberschreitung oder nach einer Benutzerinteraktion an einer anderen Stelle auf dem Bildschirm, insbesondere nach Interaktionen, die eine neue Oberfläche oder Aktivität hervorrufen. Snackbars können vom Bildschirm gewischt werden.
Verhält sich Snackbar
also wie ein Toast
oder ein Dialog
? Können Snackbars in einer Layoutdatei verwendet werden? Wie könnte ich es programmatisch verwenden?
P.S.:
Snackbar
verhält sich wie Toast
, unterscheidet sich jedoch von Toast
. Snackbars werden am unteren Bildschirmrand angezeigt und enthalten Text mit einer optionalen Einzelaktion. Sie werden automatisch nach Ablauf der angegebenen Zeitdauer beendet, indem sie vom Bildschirm animiert werden. Darüber hinaus können Benutzer sie vor dem Timeout wegwischen, was erheblich leistungsfähiger ist als Toast, ein weiterer leichter Feedback-Mechanismus.
Sie können es programmgesteuert wie folgt verwenden:
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!
Beachten Sie, dass die Verwendung einer Ansicht in der Methode von make()
- Snackbar
versucht, sie zu finden, um sicherzustellen, dass sie am Boden verankert ist.
Was mehr ist, Android Design Support Library wird verwendet für Android 2.1+ (API 7 +), welche Funktionen Ansicht der Navigationsleiste, Floating Labels zum Bearbeiten von Text, Floating Action Button, Snackbar, Tabs und so ähnlich.
Navigationsansicht
Die Navigationsleiste kann ein wichtiger Schwerpunkt für die Identität und Navigation in Ihrer App sein, und eine einheitliche Gestaltung kann einen erheblichen Unterschied darin bewirken, wie einfach die Navigation in Ihrer App ist, insbesondere für Erstbenutzer. NavigationView
vereinfacht dies, indem es das für die Navigationsleiste erforderliche Framework sowie die Möglichkeit bietet, Ihre Navigationselemente über eine Menüressource aufzublasen.
Du kannst es so benutzen:
<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>
Das Schubladenmenü könnte wie folgt aussehen:
<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>
oder:
<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>
Sie erhalten Rückrufe für ausgewählte Elemente, wenn Sie mit setNavigationItemSelectedListener () einen OnNavigationItemSelectedListener festlegen. Auf diese Weise erhalten Sie das angeklickte Menüelement, mit dem Sie Auswahlereignisse bearbeiten, den aktivierten Status ändern, neuen Inhalt laden, die Schublade programmgesteuert schließen oder andere gewünschte Aktionen ausführen können.
Floating Labels zum Bearbeiten von Text
Auch der bescheidene EditText
hat Raum für Verbesserungen im Materialdesign. Während ein EditText
allein den Hinweistext verdeckt, nachdem das erste Zeichen eingegeben wurde, können Sie ihn jetzt in ein TextInputLayout
umbrechen, wodurch der Hinweistext zu einem wird ) Floating Label über dem EditText
, um sicherzustellen, dass Benutzer den Kontext bei der Eingabe nicht verlieren. Zusätzlich zum Anzeigen von Hinweisen können Sie auch eine Fehlermeldung unter der EditText
anzeigen, indem Sie setError()
aufrufen.
Floating Action Button
Eine schwebende Aktionstaste ist eine runde Taste, die eine primäre Aktion auf Ihrer Benutzeroberfläche kennzeichnet. Mit der FloatingActionButton
der Design-Bibliothek erhalten Sie eine einheitliche Implementierung, die standardmäßig mit dem colorAccent
aus Ihrem Design eingefärbt ist.
Wenn FloatingActionButton
ImageView
erweitert, verwenden Sie Android:src
Oder eine der Methoden wie setImageDrawable()
, um das in FloatingActionButton
angezeigte Symbol zu steuern. ].
Tabulatoren
Das Navigationsmuster auf oberster Ebene wird häufig zum Organisieren verschiedener Inhaltsgruppierungen verwendet. Die TabLayout
der Entwurfsbibliothek implementiert sowohl feste Registerkarten, bei denen die Breite der Ansicht gleichmäßig auf alle Registerkarten aufgeteilt ist, als auch scrollbare Registerkarten, bei denen die Registerkarten keine einheitliche Größe haben und horizontal gescrollt werden können.
Tabulatoren können programmgesteuert hinzugefügt werden:
TabLayout tabLayout = ...;
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
Wenn Sie ViewPager
für horizontales Blättern zwischen Registerkarten verwenden möchten, können Sie Registerkarten direkt aus Ihrem PagerAdapter’s
getPageTitle()
erstellen und die beiden dann mit setupWithViewPager()
miteinander verbinden. Dadurch wird sichergestellt, dass Registerauswahlereignisse die ViewPager
aktualisieren und Seitenänderungen das ausgewählte Register aktualisieren.
CoordinatorLayout und die App-Leiste
die Entwurfsbibliothek führt CoordinatorLayout
ein, ein Layout, das eine zusätzliche Kontrolle über Berührungsereignisse zwischen untergeordneten Ansichten bietet, was viele Komponenten in der Entwurfsbibliothek nutzen. Wenn Sie versuchen, ein AppBarLayout zu verwenden, können Ihre Toolbar
und andere Ansichten (z. B. die von TabLayout
bereitgestellten Registerkarten) auf Bildlaufereignisse in einer mit einem ScrollingViewBehavior gekennzeichneten Geschwisteransicht reagieren. Daher können Sie ein Layout erstellen wie:
<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>
Wenn der Benutzer nun durch das RecyclerView
scrollt, kann das AppBarLayout
auf diese Ereignisse reagieren, indem es die Scroll-Flags der Kinder verwendet, um zu steuern, wie sie eintreten (auf dem Bildschirm scrollen) und verlassen (vom Bildschirm scrollen).
Die Designbibliothek, AppCompat und die gesamte Android Support Library sind wichtige Werkzeuge, um die Bausteine für die Erstellung einer modernen, gut aussehenden Android App ohne Alles von Grund auf neu bauen.
Das neue Snackbar
benötigt kein Android-M.
Es befindet sich in der new design support library und kann noch heute verwendet werden.
Aktualisieren Sie einfach Ihr SDK und fügen Sie diese Abhängigkeit in Ihren Code ein:
compile 'com.Android.support:design:22.2.0'
Sie können einen Code wie diesen verwenden:
Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG)
.setAction("Action", null)
.show();
Es ist wie ein Toast.
Um eine Aktion zuweisen müssen Sie den OnClickListener
setzen.
Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG)
.setAction("Action", myOnClickListener)
.show();
Wenn Sie den Hintergrund ändern möchten Farbe können Sie so etwas verwenden:
Snackbar snackbar = Snackbar.make(view, "Here's a Snackbar",
Snackbar.LENGTH_LONG);
View snackBarView = snackbar.getView();
snackBarView.setBackgroundColor(colorId);
snackbar.show();
Wenn Sie einige eingebaute Funktionen haben möchten, wie die Swipe-to-Dismiss - Geste oder das FAB-Scrollen in der Snackbar, einfach mit einem - CoordinatorLayout
in Ihrer Ansichtshierarchie.
Auf Activity
können Sie verwenden:
String s = "SnackBar"
Snackbar.make(findViewById(Android.R.id.content), s, Snackbar.LENGTH_LONG).show();
und auf Fragment
:
Snackbar.make(getView(), s, Snackbar.LENGTH_LONG).show();
Bearbeiten:
Zum Ändern der Hintergrundfarbe verwende ich Folgendes:
String s = "SnackBar"
Snackbar snack = Snackbar.make(getView(), s, Snackbar.LENGTH_LONG);
View view = snack.getView();
view.setBackgroundColor(Color.YELLOW);
snack.show();
Und zum Ändern der Textfarbe (trotz Thema):
View view = snack.getView();
TextView tv = (TextView) view.findViewById(Android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
Klappt wunderbar ;-)
Ich stelle die Codierung ein
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();
schon gesehen? http://Android-developers.blogspot.in/2015/05/Android-design-support-library.html ?
es fasst die gesamte Unterstützungsbibliothek zusammen.
Die Snackbar kann auch Symbole anzeigen.
Beispiel: In keinem Netzwerk können Sie eine solche Snackbar anzeigen (genau wie in Google Mail).
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();
sie können auch die Textfarbe und den Hintergrund der Snackbar ändern
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();