如何实施底页规格? http://www.google.com/design/spec/components/bottom-sheets.html
Google云端硬盘的新更新通过按下浮动操作按钮显示了这一点 - >
当然,规格从来没有说过任何关于圆角的内容,无论是否可行,只是不确定如何去做。目前使用AppCompat库并将目标设置为21。
由于
答案 0 :(得分:63)
BottomSheet
现在是android-support-library
的一部分。请参阅John Shelleys' answer。
不幸的是,目前没有关于如何做到这一点的“官方”方式(至少没有我知道的)。
幸运的是,有一个名为"BottomSheet" (click)的库,它模仿BottomSheet
的外观和感觉,并支持Android 2.1及更高版本。
对于云端硬盘应用,以下是此库代码的外观:
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>
输出如下:
我认为,这与原版非常接近。如果您对颜色不满意,可以自定义颜色 - see this (click)。
答案 1 :(得分:62)
回答我自己的问题,让开发人员知道新的支持库终于提供了这个!所有人都欢呼所有强大的谷歌!
的示例// 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 answer above仍然是一个有效的选项,但很高兴知道Google也支持这一标准。
答案 2 :(得分:7)
您现在可以使用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 tutorial以了解相关信息。
答案 3 :(得分:7)
关注博文: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,因此如果您不设置它,您将无法看到您的视图。
答案 4 :(得分:5)
我会按照指南中的直角进行操作。至于实施 - 也许最好使用这个项目的想法:https://github.com/umano/AndroidSlidingUpPanel
我认为您可以按原样使用它,或者采取实施的想法。 关于如何实现类似滑动面板的另一篇很棒的文章可以在这里找到: http://blog.neteril.org/blog/2013/10/10/framelayout-your-best-ui-friend/
答案 5 :(得分:5)
以下是其他一些选项:
答案 6 :(得分:1)
如果你想实现这样的底片,请遵循这个设计模式 几个简单的步骤
bottom_sheet_layout.xml
布局文件bottom_sheet_background.xml
个可绘制文件像这样设置您的 bottom_sheet_background.xml
可绘制文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/bottom_sheet_background"/>
<corners
android:topRightRadius="20dp"
android:topLeftRadius="20dp"/>
</shape>
你的bottom_sheet_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/bottom_Sheet"
android:background="@drawable/bottom_sheet_background"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="24dp"
android:paddingEnd="24dp"
android:paddingTop="16dp"
android:paddingBottom="42dp"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/rectangle_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/rectangle_39"
/>
//add your design code here
</LinearLayout>
还有你的 activity_main.xml
或片段
<androidx.coordinatorlayout.widget.CoordinatorLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
//design your code here
//this is your bottom sheet layout included here
<include
android:id="@+id/bottom_sheet_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="com.google.android.material.
bottomsheet.BottomSheetBehavior"
layout="@layout/bottom_sheet_layout"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
最后,在您的 MainActivity
或 Fragment
类中添加代码。在这里,我在您的 onCreate
或 onCreateView
BottomSheetBehavior.from(binding.bottomSheetLayout.bottomSheet).apply {
//peek height is default visible height
peekHeight = 200
this.state = BottomSheetBehavior.STATE_COLLAPSED
}
就是这样!
答案 7 :(得分:0)
Google最近发布了Android Support Library 23.2,正式将Bottom sheets带到Android设计支持库。