Wie implementieren Sie die Bottom-Sheet-Spezifikation? http://www.google.com/design/spec/components/bottom-sheets.html
Das neue Update für Google Drive zeigt dies mit der Taste Floating Action Button ->
Zugegeben, die Spezifikationen sagen niemals etwas über abgerundete Ecken aus, unabhängig davon, ob dies möglich ist, nur unsicher, wie es zu tun ist. Derzeit wird die AppCompat-Bibliothek verwendet und das Ziel auf 21 festgelegt.
Vielen Dank
Antworten:
Bearbeiten
Das
BottomSheet
ist jetzt Teil desandroid-support-library
. Siehe John Shelleys Antwort .Leider gibt es derzeit keine "offizielle" Möglichkeit, dies zu tun (zumindest keine, die mir bekannt ist).
Glücklicherweise gibt es eine Bibliothek namens "BottomSheet" (Klick), die das Erscheinungsbild von
BottomSheet
und nachahmt und Android 2.1 und höher unterstützt.Im Fall der Drive-App sieht der Code mit dieser Bibliothek folgendermaßen aus:
new BottomSheet.Builder(this, R.style.BottomSheet_Dialog) .title("New") .grid() // <-- important part .sheet(R.menu.menu_bottom_sheet) .listener(new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO } }).show();
menu_bottom_sheet (im Grunde eine Standardressource /res/menu/*.xml)
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/folder" android:title="Folder" android:icon="@drawable/ic_action_folder" /> <item android:id="@+id/upload" android:title="Upload" android:icon="@drawable/ic_action_file_upload" /> <item android:id="@+id/scan" android:title="Scan" android:icon="@drawable/ic_action_camera_alt" /> </menu>
Die Ausgabe sieht folgendermaßen aus:
Was meiner Meinung nach dem Original ziemlich nahe kommt. Wenn Sie mit den Farben nicht zufrieden sind, können Sie sie anpassen - siehe hier (klicken) .
quelle
getShareActions
Methode wiederverwendet , um alle möglichen Freigabeoptionen zu erhalten. Übrigens auch nützlich, um.limit(R.integer.num_share_actions)
den Builder aufzurufen, es sei denn, Sie möchten, dass das Blatt den gesamten Bildschirm abdecktBeantworte meine eigene Frage, damit Entwickler wissen, dass die neue Support-Bibliothek dies endlich bietet! Alle begrüßen das mächtige Google!
Ein Beispiel aus dem Android-Entwicklerblog :
Die Antwort von @ reVerse oben ist immer noch eine gültige Option, aber es ist schön zu wissen, dass es einen Standard gibt, den auch Google unterstützt.
quelle
Folgen Sie dem Blog-Beitrag: http://android-developers.blogspot.com/2016/02/android-support-library-232.html
Meine XML sah am Ende so aus:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/coordinator_layout" xmlns:app="http://schemas.android.com/apk/res-auto"> <LinearLayout android:id="@+id/bottom_sheet" android:layout_width="match_parent" android:layout_height="100dp" android:orientation="horizontal" app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> <ImageView android:src="@android:drawable/ic_input_add" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </android.support.design.widget.CoordinatorLayout>
Und in meiner onCreateView meines Fragments:
coordinatorLayout = (CoordinatorLayout)v.findViewById(R.id.coordinator_layout); View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet); BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet); behavior.setPeekHeight(100); behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { // React to state change } @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { // React to dragging events } });
Der Standardwert von setPeekHeight ist 0. Wenn Sie ihn also nicht festlegen, können Sie Ihre Ansicht nicht sehen.
quelle
com.google.android.material.bottomsheet.BottomSheetBehavior
Sie können jetzt die offizielle
BottomSheetBehavior
API aus der Android-Support-Bibliothek 23.2 verwenden.Unten finden Sie ein Beispielcode-Snippet
bottomSheetBehavior = BottomSheetBehavior.from(findViewById(R.id.bottomSheet)); case R.id.expandBottomSheetButton: bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); break; case R.id.collapseBottomSheetButton: bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); break; case R.id.hideBottomSheetButton: bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); break; case R.id.showBottomSheetDialogButton: new MyBottomSheetDialogFragment().show(getSupportFragmentManager(), "sample");
Weitere Informationen finden Sie im YouTube-Tutorial zu Android BottomSheet .
quelle
Ich würde mit geraden Ecken fahren, wie es in den Richtlinien steht. Für die Implementierung ist es vielleicht am besten, die Idee aus diesem Projekt zu verwenden: https://github.com/umano/AndroidSlidingUpPanel
Ich denke, Sie könnten es so verwenden, wie es ist, oder die Idee für die Implementierung übernehmen. Ein weiterer großartiger Artikel zur Implementierung eines ähnlichen Schiebetafels finden Sie hier: http://blog.neteril.org/blog/2013/10/10/framelayout-your-best-ui-friend/
quelle
Hier sind einige der anderen Optionen:
quelle
Google hat kürzlich die Android Support Library 23.2 veröffentlicht, mit der Bottom Sheets offiziell in die Android Design Support Library aufgenommen werden.
quelle