ボトムシートの仕様をどのように実装しますか? http://www.google.com/design/spec/components/bottom-sheets.html
Googleドライブの新しいアップデートでは、フローティングアクションボタンを押すとこれが示されます->
仕様では、角の丸みについては何も言わないが、それができるかどうかに関係なく、どうすればいいかわからない。現在21に設定されたAppCompatライブラリとターゲットを使用しています。
ありがとう
開発者が新しいサポートライブラリが最終的にこれを提供することを開発者に知らせるために、私自身の質問に答えます!すべてが強力なGoogleを称賛します!
// 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の 上記の回答 は依然として有効なオプションですが、Googleがサポートしている標準もあることを知ってうれしいです。
BottomSheet
はAndroid-support-library
の一部になりました。 John Shelleys 'answer を参照してください。
残念ながら、現在、これを行う方法に関する「公式」な方法はありません(少なくとも私が知っている方法はありません)。
幸いにも "BottomSheet"(クリック) というライブラリがあり、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>
出力は次のようになります。
これは、オリジナルにかなり近いと思います。色に満足できない場合は、カスタマイズできます- こちら(クリック)を参照 。
ブログの投稿に続く: 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であるため、設定しないと、ビューを表示できません。
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 を参照して、理解してください。
他のオプションの一部を次に示します。
ガイドラインにあるように、私はまっすぐなコーナーで行きます。実装については-このプロジェクトのアイデアを使用するのが最善かもしれません: https://github.com/umano/AndroidSlidingUpPanel
そのまま使用するか、実装のアイデアを取ることができると思います。同様のスライディングパネルの実装方法に関する別の優れた記事は、ここにあります。 http://blog.neteril.org/blog/2013/10/10/framelayout-your-best-ui-friend/
Googleは最近リリースしました Android Support Library 23.2 これは公式に ボトムシート をAndroid Design Support Libraryにもたらします。