Как реализовать спецификацию нижнего листа? http://www.google.com/design/spec/components/bottom-sheets.html
Новое обновление для Google Диска показывает это при нажатии кнопки плавающего действия ->
Допустим, в спецификациях ничего не говорится о закругленных углах, даже если это возможно, просто не зная, как это сделать. В настоящее время используется библиотека AppCompat, а цель - 21.
благодаря
Ответы:
редактировать
Теперь
BottomSheet
это частьandroid-support-library
. См. Ответ Джона Шелли .К сожалению, в настоящее время нет «официального» способа, как это сделать (по крайней мере, мне ничего не известно).
К счастью, есть библиотека под названием «BottomSheet» (щелкните), которая имитирует внешний вид
BottomSheet
и поддерживает Android 2.1 и выше.В случае приложения Drive вот как будет выглядеть код с этой библиотекой:
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 (в основном стандартный ресурс /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>
Результат выглядит так:
Что, на мой взгляд, довольно близко к оригиналу. Если вас не устраивают цвета, вы можете настроить их - см. (Щелкните) .
источник
getShareActions
методе, чтобы получить все возможные варианты обмена. Кстати, также полезно обратиться.limit(R.integer.num_share_actions)
к строителю, если вы не хотите, чтобы лист покрыл весь экранОтвечая на свой вопрос, чтобы разработчики знали, что новая библиотека поддержки наконец-то предоставляет это! Приветствую всемогущий Google!
Пример из блога разработчиков Android :
Ответ @reVerse выше по-прежнему является допустимым вариантом, но приятно знать, что есть стандарт, который также поддерживает Google.
источник
После сообщения в блоге: http://android-developers.blogspot.com/2016/02/android-support-library-232.html
Мой xml в итоге выглядел так:
<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>
И в моем onCreateView моего фрагмента:
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 } });
По умолчанию для setPeekHeight установлено значение 0, поэтому, если вы не установите его, вы не сможете увидеть свое представление.
источник
com.google.android.material.bottomsheet.BottomSheetBehavior
Теперь вы можете использовать официальный
BottomSheetBehavior
API из библиотеки поддержки Android 23.2.Ниже приведен пример фрагмента кода
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");
Пожалуйста, обратитесь к руководству YouTube по Android BottomSheet, чтобы понять его.
источник
Я бы выбрал прямые углы, как указано в руководстве. Что касается реализации - возможно, лучше всего использовать идею из этого проекта: https://github.com/umano/AndroidSlidingUpPanel
Думаю, можно было бы использовать его как есть или взять идею для реализации. Еще одну отличную статью о том, как реализовать подобную раздвижную панель, можно найти здесь: http://blog.neteril.org/blog/2013/10/10/framelayout-your-best-ui-friend/
источник
Вот еще несколько вариантов:
источник
Google недавно выпустила библиотеку поддержки Android 23.2, которая официально добавляет нижние листы в библиотеку поддержки дизайна Android.
источник