Как изменить начальное выравнивание Android Snackbar снизу вверх?

Недавно появившаяся андроидная библиотека появилась всего несколько дней назад, но я бы хотел, чтобы SnackBar отображался поверх экрана, предпочтительно в RelativeLayout, как это показано на родительском представлении.

Как изменить начальное выравнивание SnackBar, которое, как я полагаю, будет layout_alignParentBottom до layout_alignParentTop?

Ответы

Ответ 1

Можно сделать закуску сверху экрана, используя следующую команду:

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.

Для уведомлений, поднимающихся сверху, скорее всего, лучше получить вместо этого Пользовательский баннер.

Ответ 2

Нет, для спецификации материала spec для Snackbars:

Snackbars обеспечивает легкую обратную связь об операции, отображая краткое сообщение в нижней части экрана.

Поскольку библиотека Design Design предназначена для реализации спецификаций дизайна материалов, нельзя расположить Snackbar в любом положении, отличном от нижней части экрана (или содержащем CoordinatorLayout).

Ответ 3

Здесь простой способ добавить SnackBar с использованием CoordinatorLayout сверху экрана, но анимация по-прежнему остается проблемой.

Просто добавьте макет 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

Это можно сделать простыми способами

сначала Создайте макет, в который будет включаться закуска

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

затем в Code

  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);

Ответ 5

Ну, вы можете получить компоновку snackbar и изменить нижний маркер в коде. как

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();