web-dev-qa-db-ja.com

Android Snackbarの初期配置を下から上に変更するにはどうすればよいですか?

最近のAndroidライブラリはほんの数日前に出ましたが、SnackBarを画面の上部、できれば親ビューであるRelativeLayout内に表示させたいと思います。

どうすればSnackBarの最初の配置をlayout_alignParentBottomlayout_alignParentTopに変更できますか?

14
apollow

これを使用して、スナックバーを画面の上部に表示することができます。

Snackbar snack = Snackbar.make(parentLayout, str, Snackbar.LENGTH_LONG);
View view = snack.getView();
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)view.getLayoutParams();
params.gravity = Gravity.TOP;
view.setLayoutParams(params);
snack.show()

注:スナックバーのアニメーションは、ianhanniballakeの回答に従って下部に表示されるように意図されていたため、画面の下部から始まり、画面の上部に急上昇します。

上から急増する通知の場合は、代わりにカスタムバナーを取得した方がよいでしょう。

33
apollow

いいえ、マテリアルデザインごと スナックバーの仕様

スナックバーは、画面の下部に短いメッセージを表示することで、操作に関する軽量のフィードバックを提供します。

デザインライブラリはマテリアルデザインの仕様を実装しようとしているため、スナックバーを画面の下部(またはCoordinatorLayoutを含む)以外の場所に配置することはできません。

13
ianhanniballake

画面の上からCoordinatorLayoutを使用してSnackBarを追加する簡単な方法を次に示しますが、アニメーションはまだ問題です。

次のように、CoordinatorLayoutレイアウトをレイアウトに追加するだけです。

<Android.support.design.widget.CoordinatorLayout
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentTop="true"
    Android:layout_centerHorizontal="true"
    Android:id="@+id/snackbarlocation">
</Android.support.design.widget.CoordinatorLayout>

次に、アクティビティでそれへの参照を取得し、それを以下のようにSnackBarに渡します。

    CoordinatorLayout Clayout = (CoordinatorLayout)findViewById(R.id.snackbarlocation);

    FabButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Snackbar.make(Clayout, "This snack bar located at top", Snackbar.LENGTH_SHORT).show();
        }
    });

クレジット

4
Atul O Holic

さて、あなたはスナックバーのlayoutparamを取得し、コードのbottomMarginを変更することができます。お気に入り

Snackbar snackbar = Snackbar.make(rootView, message, Snackbar.LENGTH_LONG);
View view = snackbar.getView();
FrameLayout.LayoutParams para = (CoordinatorLayout) view.getLayoutParams();
params.bottomMargin = showAtLocation // pass your location offset here
view.setLayoutParams(params);

次に、スナックバーインスタンスを使用して、いつでも表示できます

snackbar.show();
2
Cheng

それは簡単な方法で行うことができます

最初にスナックバーを含めるレイアウトを作成します

<LinearLayout
    Android:id="@+id/info_container"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical"/>

その後、コードで

  ll_mesg.addView(Snackbar.make(ll_mesg, "Please choose your luck from one of box", Snackbar.LENGTH_LONG)
            .getView());
    new Handler().postDelayed(new Runnable() {
        public void run() {
            ll_mesg.removeAllViews();
            }
        }
        ,1000);
1
yubaraj poudel