2015-12-12 4 views
18

Ich möchte ein Bottom Sheet (Deep Linking Weg) öffnen, aber innerhalb von ihm anstelle von Aktienoptionen oder nur ein Layout möchte ich eine Aktivität mit seinem Layout oder ein Fragment mit sein Layout.Öffnen Sie eine Aktivität oder ein Fragment mit Bottom Sheet Deep Linking

Bekannte Bibliotheken, die Bottom Sheet öffnen Wie kann Layout nicht ganze Aktivität öffnen.

Gibt es eine Möglichkeit, dies mit einem Coordinator Layout zu erreichen?

Ich fand ein Google-Foto auf Bottom Sheet Component Page, das zeigt, was genau ich im Sinn habe. Googles Beschreibung sagt:

Die App auf der rechten Seite zeigt ein unteres Blatt mit Inhalten aus der App auf der linken Seite. Dadurch kann der Benutzer Inhalte von einer anderen App anzeigen, ohne die aktuelle App zu verlassen.

enter image description here

+1

jemand tun dies bitte updaten, ich habe die gleiche Sache zu tun – Lokesh

+0

kann dies helfen http://www.hidroh.com/2016/06/17/bottom-sheet-everything/ –

+0

Für mich scheint es eher wie Eröffnung ein Fragment, das eine Aktivität ist. –

Antwort

0

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.