Android如何从材料devise文档实现底部工作表

你如何实现底层specficiation? http://www.google.com/design/spec/components/bottom-sheets.html

Google云端硬盘的新更新通过浮动操作button – >显示

在这里输入图像描述

诚然,规范从来没有说任何有关圆angular的东西,不pipe有可能做什么,只是不确定如何去做。 目前使用的AppCompat库和目标设置为21。

谢谢

编辑

BottomSheet现在是android-support-library 。 见John Shelleys的回答 。


不幸的是,目前没有“官方”的方式来做这件事(至less我没有意识到)。
幸运的是,有一个名为“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> 

输出如下所示:

底部图片的图片

我认为,这与原文非常接近。 如果您对颜色不满意,可以自定义 – 请参阅(点击) 。

回答我自己的问题,以便开发人员知道新的支持库最终提供了这个! 所有的欢呼声,谷歌!

Android开发者博客的一个例子:

 // The View with the BottomSheetBehavior View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet); BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet); behavior.setBottomSheetCallback(new 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 } }); 

上面的 @ reVerse的答案仍然是一个有效的select,但它很高兴知道有一个谷歌支持的标准。

您现在可以使用Android支持库23.2的官方BottomSheetBehavior API。

以下是示例代码片段

 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"); 

请参阅Android BottomSheet youtube教程来了解它。

关注博客文章: 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,所以如果你没有设置,你将无法看到你的视图。

我会像指导原则一样直走弯路。 至于实现 – 也许最好使用这个项目的想法: https : //github.com/umano/AndroidSlidingUpPanel

我认为你可以按原样使用它,或者采取实施的想法。 关于如何实现类似的滑动面板的另一个伟大的文章可以在这里find: http : //blog.neteril.org/blog/2013/10/10/framelayout-your-best-ui-friend/

以下是其他一些选项:

  • 有一个来自Flipboard ,但是embedded的活动需要修改底部表格的工作。
  • tutti-ch的底部expression :这已经从Android Repo的ResolverActivity中提取出来,启动活动不需要修改。

Google最近发布了Android支持库23.2 ,正式将Bottom表单提交给Androiddevise支持库。