2015-12-12 8 views
18

Chcę otworzyć arkusz dolny (sposób łączenia głębokiego), ale w jego środku zamiast opcji udostępniania lub po prostu układ chcę mieć działanie z jego układem lub fragmentem z jego układ.Otwórz działanie lub fragment z głębokim łączeniem na dole arkusza

Znane biblioteki, które otwierają arkusz dolny podobny do Flipboard/BottomSheet, mogą otwierać układ, a nie całą aktywność.

Czy można to osiągnąć za pomocą układu koordynatora?

Znalazłem zdjęcie Google na Bottom Sheet Component Page, które pokazuje, co dokładnie mam na myśli. Opis Google mówi:

Aplikacja po prawej stronie wyświetla dolny arkusz zawierający treść z aplikacji po lewej stronie. Umożliwia to użytkownikowi przeglądanie treści z innej aplikacji bez opuszczania bieżącej aplikacji.

enter image description here

+1

wszystko to proszę zaktualizować, muszę zrobić to samo – Lokesh

+0

może to pomóc http://www.hidroh.com/2016/06/17/bottom-sheet-everything/ –

+0

Dla mnie wydaje się bardziej jak otwarcie fragment, który jest aktywnością. –

Odpowiedz

0

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.

Powiązane problemy