Nie jestem ekspertem, ale po niektórych badań znalazłem prosty sposób to zrobić. Najpierw upewnij się, że Twój układ główny to android.support.design.widget.CoordinatorLayout
.
tylko wewnątrz tego CoodrdinatorLayout
dodaj należą do dolnej wzoru arkusza:
<include layout="@layout/bottom_sheet_main" />
Wtedy i jest to prawdopodobnie najważniejszy krok, trzeba określić zachowanie dna układ Sheet , więc tutaj jest przykładowy kod:
<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>
Okej, więc to był cały kod XML. Zauważ, że zastosowaliśmy app:layout_behavior
, aby mieć pożądane właściwości. Kolejną ważną rzeczą jest określenie app:behavior_hideable="true"
, jeśli chcemy mieć możliwość ukrycia całego układu. Atrybut app:behavior_peekHeight="64dp"
oznacza, że widok będzie miał wysokość 64dp, gdy jest zwinięty (ale nie ukryty). Istnieją 3 główne stany tego widoku:
Expanded (STATE_EXPANDED
): gdy warstwa dolna jest całkowicie otwarty.
Zwinięty (STATE_COLLAPSED
): gdy użytkownik widzi tylko niewielką część z góry widoku. Atrybut ten określa wartość app:behavior_peekHeight
.
ukryty (STATE_HIDDEN
): (! NIESPODZIANKA HAHA) Gdy jest całkowicie ukryty.
Mamy też STATE_SETTLING
i STATE_DRAGGING
które są przemijające, ale nie są one tak ważne. Teraz, jeśli uruchomisz aplikację (nie musisz pisać żadnego kodu JAVA), zobaczysz, że jeśli przesuniesz w górę tytuł, który pojawi się w dolnej części układu, Arkusz zostanie rozwinięty i taki sam w inny sposób.
Ale możesz zauważyć, że po kliknięciu w Dolny arkusz nic się nie dzieje.Można grać z jakiegoś kodu Java do zarządzania stan prześcieradło:
stwierdzenie widok: LinearLayout bottomSheet = (LinearLayout)findViewById(R.id.bottomSheet);
zadeklarować zachowanie „manager”:
final BottomSheetBehavior bsb = BottomSheetBehavior.from(bottomSheet);
A potem można dostać zmiany stanu:
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);
}});
I oto jest!
Możesz także użyć modalnego dolnego arkusza, który pozwala utworzyć arkusz dolny tak, jakby był fragmentem.
wszystko to proszę zaktualizować, muszę zrobić to samo – Lokesh
może to pomóc http://www.hidroh.com/2016/06/17/bottom-sheet-everything/ –
Dla mnie wydaje się bardziej jak otwarcie fragment, który jest aktywnością. –