web-dev-qa-db-ja.com

上からスナックバー。これは可能ですか?

SnackBarを下から表示する通常の動作ではなく、上からSnackBarアニメーションを提供したかったのです。これは簡単にハッキング可能ですか?

13
Fábio Carballo

いいえ、できません。ドキュメントには、

モバイルでは画面の下部に短いメッセージが表示され、大きなデバイスでは左下に表示されます。スナックバーは画面上の他のすべての要素の上に表示され、一度に1つしか表示できません。

Crouton のような3番目のパートライブラリを使用できます。

5
Blackbelt

可能です。私が作成したこのライブラリを確認してください https://github.com/AndreiD/TSnackBar

基本的に、上からスライドする2つの新しいアニメーションを追加し、レイアウトの重力を変更します。それで全部です :)

後で編集:バグが発生しています...誰かがそれを修正するためにある程度の時間を費やしたいのであれば、私たちは皆それを感謝します:)

4
OWADVL
 CoordinatorLayout   coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorLayout);
  Snackbar snackbar = Snackbar.make(coordinatorLayout, "Text", Snackbar.LENGTH_LONG);
   View view = snackbar.getView();
   CoordinatorLayout.LayoutParams params =(CoordinatorLayout.LayoutParams)view.getLayoutParams();
                params.gravity = Gravity.TOP;
                view.setLayoutParams(params);
      snackbar.show();
4
Vijayan R

編集:このソリューションはスナックバーを上にレンダリングしますが、アニメーションは下からです。

それは、少なくとも Android Material ライブラリと少しのトリックで可能です。次のように、スナックバーを最上部にレンダリングするビューにバインドできます。activity_main.xmlで:

<FrameLayout>

    <!-- rest of the components here -->
    
    <androidx.coordinatorlayout.widget.CoordinatorLayout
        Android:id="@+id/top_coordinator"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="top"/>
</FrameLayout>

MainActivity.ktで:

val snackbar = Snackbar.make(
    findViewById(R.id.top_coordinator),
    "Hello World",
    Snackbar.LENGTH_INDEFINITE
)

snackbar.show()