如何将 Android Snackbar 的初始对齐方式从底部更改为顶部?
How do I change an Android Snackbar's initial alignment from bottom to top?
最近的 android 库几天前才出来,但我想让 SnackBar
出现在屏幕顶部,最好是在 RelativeLayout 作为它的父视图中。
如何将我认为是 layout_alignParentBottom
的 SnackBar
的初始对齐更改为 layout_alignParentTop
?
不,根据 material 设计 spec for Snackbars:
Snackbars provide lightweight feedback about an operation by showing a brief message at the bottom of the screen.
由于设计库试图实现 material 设计规范,因此无法将 Snackbar 定位在屏幕底部以外的任何位置(或包含 CoordinatorLayout
)。
可以使用以下方法使快餐栏出现在屏幕顶部:
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 的回答,它本来应该位于底部。
对于从顶部涌现的通知,最好改用自定义横幅。
可以通过简单的方式完成
首先创建要包含 snackbar 的布局
<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);
这是使用 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>
然后在您的 Activity 中获取对它的引用并将其传递给 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();
}
});
嗯,你可以在代码中获取snackbar的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 实例来随时显示
snackbar.show();
最近的 android 库几天前才出来,但我想让 SnackBar
出现在屏幕顶部,最好是在 RelativeLayout 作为它的父视图中。
如何将我认为是 layout_alignParentBottom
的 SnackBar
的初始对齐更改为 layout_alignParentTop
?
不,根据 material 设计 spec for Snackbars:
Snackbars provide lightweight feedback about an operation by showing a brief message at the bottom of the screen.
由于设计库试图实现 material 设计规范,因此无法将 Snackbar 定位在屏幕底部以外的任何位置(或包含 CoordinatorLayout
)。
可以使用以下方法使快餐栏出现在屏幕顶部:
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 的回答,它本来应该位于底部。
对于从顶部涌现的通知,最好改用自定义横幅。
可以通过简单的方式完成
首先创建要包含 snackbar 的布局
<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);
这是使用 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>
然后在您的 Activity 中获取对它的引用并将其传递给 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();
}
});
嗯,你可以在代码中获取snackbar的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 实例来随时显示
snackbar.show();