Eine der wichtigsten Änderungen am Android-Design wurde während der Google I / O-Konferenz 2014 eingeführt, Material Design. Obwohl Google eine Reihe von Richtlinien für die neue Designphilosophie eingeführt hatte, waren die Entwickler für die Implementierung der neuen Muster verantwortlich.
Dies führte zu vielen Drittanbieter-Bibliotheken, die die Ziele des Materialdesigns mit ähnlichen, aber unterschiedlichen Implementierungen erreichten. Um die Entwicklungsprobleme des Materialdesigns zu verringern, führte Google im Rahmen der Keynote der Google I / O-Konferenz 2015 die Design-Support-Bibliothek ein.
Wie bei vielen Dingen in der Softwareentwicklung wurde die Design-Unterstützungsbibliothek mit der Zeit verbessert und mit der Version 23.2 Unterstützung für unterste Blätter hinzugefügt. In diesem Artikel erfahren Sie, wie Sie das unterste Blattmuster auf einfache Weise in Ihre eigenen Apps implementieren. Ein Beispielprojekt für diesen Artikel finden Sie auf GitHub.
Um das unterste Blatt zu implementieren, haben Sie zwei Optionen, eine Containeransicht mit einem BottomSheetBehavior
in der Layoutdatei oder a BottomSheetDialogFragment
. Um eine der beiden Optionen verwenden zu können, müssen Sie die Design-Support-Bibliothek mit einer Mindestversion von in Ihr Projekt importieren 23.2. Sie können das in tun build.gradle indem Sie die folgende Zeile unter einfügen Abhängigkeiten
:
"com.android.support:design:23.2.0" kompilieren
Wenn Sie Ihr Projekt mit der Design-Support-Bibliothek synchronisiert haben, können Sie die Layoutdatei öffnen, die ein unteres Blatt enthalten muss. In unserem Beispielprojekt verwende ich das folgende XML, in dem drei Schaltflächen angezeigt werden activity_main.xml.
Bei der Ausführung auf einem Gerät sieht das Layout folgendermaßen aus:
Es gibt einige wichtige Punkte in der Layout-Datei, die Sie beachten müssen. Um das Bottom-Sheets-Widget zu verwenden, müssen Sie ein verwenden KoordinatorLayout
Container für die Ansichten. Am Ende der Datei stellen Sie fest, dass es eine NestedScrollView
mit einem Textvorschau
. Während eine beliebige Containeransicht in einem untersten Blatt verwendet werden kann, kann das Scrollen nur ordnungsgemäß ausgeführt werden, wenn Sie einen Container verwenden, der verschachteltes Scrollen unterstützt, wie z NestedScrollView
oder ein RecyclerView
.
Damit ein Container von der Design-Support-Bibliothek als unterer Blattcontainer erkannt wird, müssen Sie den Container einschließen Layoutverhalten
Attribut und geben Sie einen Wert von android.support.design.widget.BottomSheetBehavior
. Sie können dies oben in sehen NestedScrollView
.
Ein weiteres wichtiges Attribut für den unteren Blattcontainer ist das layout_height
. Unabhängig von den Abmessungen, die Ihr Containerelement verwendet, wird festgelegt, wie Ihr unteres Blatt angezeigt wird. Es gibt eine Einschränkung, die Sie bei der unteren Blatthöhe beachten müssen. Wenn Sie die KoordinatorLayout
, andere bewegen Aussicht
Objekte in der Umgebung, z. B. mit einem CollapsingToolbarLayout
, Dann ändert sich die Höhe Ihres untersten Blattes. Dies kann einen unerwünschten Sprungeffekt verursachen.
Wenn Sie einen Ansichtscontainer hinzugefügt und ihn in Ihrer Layoutdatei ordnungsgemäß eingerichtet haben, können Sie den Container öffnen Aktivität
oder Fragment
das verwendet das unterste Blatt. Im Beispielprojekt ist das so MainActivity.java.
Damit Ihr unteres Blatt angezeigt werden kann, müssen Sie ein erstellen BottomSheetBehavior
. Dies wird erstellt, indem ein Verweis auf die Containeransicht abgerufen und aufgerufen wird BottomSheetBehavior.from ()
auf diesem Behälter. In diesem Beispiel verweisen Sie auch auf die drei Schaltflächen aus dem Layout und dem Aufruf setOnClickListener ()
auf sie.
private BottomSheetBehavior mBottomSheetBehavior; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); BottomSheet anzeigen = findViewById (R.id.bottom_sheet); Button button1 = (Button) findViewById (R.id.button_1); Button button2 = (Button) findViewById (R.id.button_2); Button button3 = (Button) findViewById (R.id.button_3); button1.setOnClickListener (this); button2.setOnClickListener (this); button3.setOnClickListener (this); mBottomSheetBehavior = BottomSheetBehavior.from (bottomSheet);
Jetzt haben Sie eine erstellt BottomSheetBehavior
, Als letztes müssen Sie Ihr unteres Blatt zeigen Aussicht
. Sie können dies tun, indem Sie den Status Ihres festlegen BottomSheetBehavior
zu STATE_EXPANDED
, das machen wir in der Beispiel-App, wenn die Spitze Taste
geklickt wird.
@Override public void onClick (Ansicht v) switch (v.getId ()) case R.id.button_1: mBottomSheetBehavior.setState (BottomSheetBehavior.STATE_EXPANDED); brechen;
Wenn dies geschehen ist, sollte Ihre App folgendermaßen aussehen:
Um das unterste Blatt auszublenden, kann der Benutzer es nach unten streichen, um es vom Bildschirm auszublenden, oder Sie können das festlegen BottomSheetBehavior
zu STATE_COLLAPSED
.
In verschiedenen Android-Apps und Widgets von Google, z. B. in der Ortsauswahl der Places-API, haben Sie möglicherweise festgestellt, dass das untere Blattmuster verwendet wird, um eine Vorschau des unteren Blattes anzuzeigen, die für weitere Details erweitert werden kann. Dies kann mit der unteren Tabelle der Entwurfsunterstützungsbibliothek erreicht werden, indem die reduzierte Größe von festgelegt wird Aussicht
mit dem setPeekHeight ()
Methode. Wenn Sie die kürzere Version des untersten Blattes anzeigen möchten, können Sie das festlegen BottomSheetBehavior
zu STATE_COLLAPSED
.
mBottomSheetBehavior.setPeekHeight (300); mBottomSheetBehavior.setState (BottomSheetBehavior.STATE_COLLAPSED);
Wenn Sie auf die mittlere Schaltfläche klicken, wird im Peek-Modus ein unteres Blatt angezeigt, das durch Ziehen nach oben auf die volle Höhe erweitert werden kann.
Wenn Sie versuchen, das unterste Blatt nach unten zu ziehen, wird es möglicherweise nur auf die Peek-Größe reduziert. Sie können dieses Problem lösen, indem Sie ein BottomSheetCallback
zum BottomSheetBehavior
, Setzen der Peek-Größe auf null, wenn der Benutzer das Blatt reduziert. In der Beispiel-App wird diese am Ende von hinzugefügt onCreate ()
.
mBottomSheetBehavior.setBackomSheetCountback (new BottomSheetBehavior.BottomSheetCallback () @Override public void onStateCached (Ansicht bottomSheet, int newState) if (newState = BottomSheetBehavior.STATE_COLLAPSED) bottomSheet, float slideOffset) );
Wie ich bereits in diesem Artikel erwähnt habe, können Sie auch a anzeigen BottomSheetDialogFragment
anstelle von a Aussicht
im unteren Blatt. Dazu müssen Sie zunächst eine neue Klasse erstellen, die erweitert wird BottomSheetDialogFragment
.
Innerhalb des setupDialog ()
Methode können Sie eine neue Layoutdatei aufblasen und die BottomSheetBehavior
der Containeransicht in Ihrer Aktivität
. Sobald Sie das Verhalten haben, können Sie eine erstellen und verknüpfen BottomSheetCallback
damit entlassen die Fragment
wenn das Blatt verborgen ist.
öffentliche Klasse TakesKontaktanweisungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanforderungKontaktanwendungKontaktanforderungKontaktanforderungKontrollfunktion ist nicht verfügbar. @Override public void onSlide (@NonNull Ansicht bottomSheet, float slideOffset) ; @Override public void setupDialog (Dialogfenster, int-Stil) super.setupDialog (Dialog, Stil); View contentView = View.inflate (getContext (), R.layout.fragment_bottom_sheet, null); dialog.setContentView (contentView); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((Ansicht) contentView.getParent ()). GetLayoutParams (); CoordinatorLayout.Behavior behaviour = params.getBehavior (); if (Verhalten! = Null && Verhaltensinstanz von BottomSheetBehavior) ((BottomSheetBehavior) Verhalten) .setBottomSheetCallback (mBottomSheetBehaviorCallback);
Schließlich können Sie anrufen Show()
auf einer Instanz von Ihrem Fragment
um es im unteren Blatt anzuzeigen.
BottomSheetDialogFragment bottomSheetDialogFragment = new TutsPlusBottomSheetDialogFragment (); bottomSheetDialogFragment.show (getSupportFragmentManager (), bottomSheetDialogFragment.getTag ());
Die Verwendung der Design-Support-Bibliothek zur Anzeige eines untersten Blattes ist vielseitig und einfach. Sie können verwendet werden, um Details oder Kommissionierer anzuzeigen, ohne dabei in die Quere zu kommen, und sie sind auch ein hervorragender Ersatz für die DialogFragment
in der richtigen Situation. Wenn Sie wissen, wie das unterste Blatt in Ihrer App verwendet werden kann, erhalten Sie ein zusätzliches Werkzeug, um großartige Apps zu erstellen.