Ich bin kein Experte, aber nach einigen Recherchen habe ich einen einfachen Weg, dies zu tun gefunden. Stellen Sie in Ihrem activity_main.xml
zuerst sicher, dass Ihr Stammlayout der android.support.design.widget.CoordinatorLayout
ist.
Gerade innerhalb dieser CoodrdinatorLayout
fügen eine zu Ihrem Bottom-Blatt-Layout sind:
<include layout="@layout/bottom_sheet_main" />
Dann, und das ist wahrscheinlich der wichtigste Schritt, müssen Sie das Verhalten des unteren Blattes Layout angeben , also hier ist ein Beispielcode:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottomSheet"
android:layout_width="match_parent"
android:layout_height="300dp"
android:orientation="vertical"
android:background="#FFFFFF"
app:layout_behavior="@string/bottom_sheet_behavior"
app:behavior_hideable="true"
app:behavior_peekHeight="64dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:padding="16dp"
android:text="BOTTOM SHEET" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:padding="16dp"
android:text="Here goes text" />
</LinearLayout>
Okay, das war also der ganze XML-Code. Beachten Sie, dass wir angewendet haben, so dass es die gewünschten Eigenschaften hat. Eine andere wichtige Sache ist, app:behavior_hideable="true"
anzugeben, wenn wir die Möglichkeit haben wollen, das gesamte Layout zu verbergen. Das Attribut app:behavior_peekHeight="64dp"
bedeutet, dass die Ansicht 64 dpi hoch ist, wenn sie ausgeblendet (aber nicht ausgeblendet) ist. Es gibt drei Hauptzustände dieser Ansicht:
Expanded (STATE_EXPANDED
): wenn das untere Blatt ist völlig offen.
Komprimiert (STATE_COLLAPSED
): Wenn der Benutzer nur einen kleinen Teil von der Oberseite der Ansicht sieht. Das Attribut app:behavior_peekHeight
bestimmt diese Höhe.
Versteckt (STATE_HIDDEN
): Wenn es vollständig versteckt ist (ÜBERRASCHUNG HAHA!).
Wir haben auch STATE_SETTLING
und STATE_DRAGGING
, die vergänglich sind, aber sie sind nicht so wichtig. Jetzt, wenn Sie Ihre App ausführen (Sie müssen keinen JAVA-Code schreiben), werden Sie sehen, dass, wenn Sie den Titel nach oben wischen, der im unteren Teil Ihres Layouts erscheint, das Blatt erweitert wird, und dasselbe in der andere Weise.
Aber Sie können feststellen, dass nichts passiert, wenn Sie auf das Bottom Sheet klicken.Sie können mit einigen Java-Code spielen, den Zustand des unteren Blattes zu verwalten:
die Ansicht erklären: LinearLayout bottomSheet = (LinearLayout)findViewById(R.id.bottomSheet);
erklären das Verhalten „Manager“:
final BottomSheetBehavior bsb = BottomSheetBehavior.from(bottomSheet);
Und dann können Sie erhalten Zustandsänderungen:
bsb.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
String strNewState = "";
switch(newState) {
case BottomSheetBehavior.STATE_COLLAPSED:
strNewState = "STATE_COLLAPSED";
break;
case BottomSheetBehavior.STATE_EXPANDED:
strNewState = "STATE_EXPANDED";
break;
case BottomSheetBehavior.STATE_HIDDEN:
strNewState = "STATE_HIDDEN";
break;
case BottomSheetBehavior.STATE_DRAGGING:
strNewState = "STATE_DRAGGING";
break;
case BottomSheetBehavior.STATE_SETTLING:
strNewState = "STATE_SETTLING";
break;
}
Log.i("BottomSheets", "New state: " + strNewState);
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
Log.i("BottomSheets", "Offset: " + slideOffset);
}});
Und da ist es!
Sie können auch ein Modal Bottom Sheet verwenden, mit dem Sie ein Bottom Sheet erstellen können, als wäre es ein Fragment.
jemand tun dies bitte updaten, ich habe die gleiche Sache zu tun – Lokesh
kann dies helfen http://www.hidroh.com/2016/06/17/bottom-sheet-everything/ –
Für mich scheint es eher wie Eröffnung ein Fragment, das eine Aktivität ist. –