SnackBar
を下から表示する通常の動作ではなく、上からSnackBar
アニメーションを提供したかったのです。これは簡単にハッキング可能ですか?
いいえ、できません。ドキュメントには、
モバイルでは画面の下部に短いメッセージが表示され、大きなデバイスでは左下に表示されます。スナックバーは画面上の他のすべての要素の上に表示され、一度に1つしか表示できません。
Crouton のような3番目のパートライブラリを使用できます。
可能です。私が作成したこのライブラリを確認してください https://github.com/AndreiD/TSnackBar
基本的に、上からスライドする2つの新しいアニメーションを追加し、レイアウトの重力を変更します。それで全部です :)
後で編集:バグが発生しています...誰かがそれを修正するためにある程度の時間を費やしたいのであれば、私たちは皆それを感謝します:)
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();
編集:このソリューションはスナックバーを上にレンダリングしますが、アニメーションは下からです。
それは、少なくとも 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()