Как показать Snackbar над нижней панелью?

Я использую BottomBar 2.0 от roughike: https://github.com/roughike/BottomBar/

Когда я показываю SnackBar, он отображается на самом BottomBar.

Я хочу, чтобы он был нарисован над BottomBar.

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_activity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/here"
        android:background="#fff">

        <FrameLayout
            android:id="@+id/contentContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/bottomBar">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:text="Three Buttons Bar"
                android:id="@+id/textView"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                android:textColor="@color/colorPrimary"
                android:textSize="35sp" />

        </FrameLayout>

        <com.roughike.bottombar.BottomBar
            android:id="@+id/bottomBar"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_alignParentBottom="true"
            app:bb_tabXmlResource="@xml/bottombar_tabs" />
    </RelativeLayout>

</android.support.design.widget.CoordinatorLayout>

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BottomBar bottomBar = (BottomBar) findViewById(R.id.bottomBar);
        bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
            @Override
            public void onTabSelected(int tabId) {
                switch (tabId) {
                    case R.id.recent_item:
                        Snackbar.make(findViewById(R.id.main_activity), "Recent Item Selected", Snackbar.LENGTH_LONG).show();
                        break;
                    case R.id.favorite_item:
                        Snackbar.make(findViewById(R.id.main_activity), "Favorite Item Selected", Snackbar.LENGTH_LONG).show();
                        break;
                    case R.id.location_item:
                        Snackbar.make(findViewById(R.id.main_activity), "Location Item Selected", Snackbar.LENGTH_LONG).show();
                        break;
                }
            }
        });
    }
}

Скриншоты:

Только нижняя панель BottomBar скрыт, когда появляется SnackBar

Что-то не так с файлом макета??
Что я упустил??

Я также проверил это: Переместить закусочную над нижней панелью, но это не так. т помочь..

ИЗМЕНИТЬ:

Я попробовал как сказал Абтин:

Snackbar.make(bottomBar, "Location Item Selected", Snackbar.LENGTH_LONG).show();

и

<com.roughike.bottombar.BottomBar
            android:id="@+id/bottomBar"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_alignParentBottom="true"
            app:bb_tabXmlResource="@xml/bottombar_tabs"
            app:bb_behavior="underNavbar"/>

Сейчас стало так:

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

Как видите, под BottomBar есть неиспользуемое пространство, когда я устанавливаю app:bb_behavior="underNavbar", чего я не хочу.


person Gokul NC    schedule 17.10.2016    source источник


Ответы (6)


Благодаря новому материальному дизайну закусочные выглядят по-новому. Вы можете показать закусочную над BottomBar с помощью этой строки:

Snackbar snackbar = Snackbar.make(parentView, text, duration);
snackbar.setAnchorView(bottomBar);

Это сделает работу.

person Ansshkki    schedule 10.09.2019

Вы должны создать CoordinatorLayout в xml, из его нижней части вы хотите показать SnackBar и указать идентификатор CoordinatorLayout как идентификатор View at fun. сделать из SnackBar.

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/viewSnack"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="50dp"/>

внутренняя активность:

Snackbar.make(findViewById(R.id.viewSnack), "Text of the SnackBar", Snackbar.LENGTH_LONG).show();
person Taras Okunev    schedule 30.03.2017

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

Snackbar.make(findViewById(R.id.contentContainer), "Recent Item Selected", Snackbar.LENGTH_LONG).show();    
person Matthew Shearer    schedule 17.10.2016

В зависимости от того, как реализовано поведение макета координатора, вам может потребоваться передать сам вид нижней панели в первый аргумент Snackbar.make().

Snackbar.make(bottomBar, "Location Item Selected", Snackbar.LENGTH_LONG).show();

Другая возможность заключается в том, что вам не хватает атрибута для app:bb_behavior в виджете нижней панели макета.

person Abtin Gramian    schedule 17.10.2016
comment
Отредактировал вопрос .. Пожалуйста, проверьте это - person Gokul NC; 18.10.2016

Я перешел с Roughike BottomBar 2.0 на BottomBar Roughike 1.4..

Теперь он работает по назначению (конечно, код меняется).

Я также попробовал AHBottomNavigation, это круто и также работает по назначению.

Я не помечаю это как ответ, так как это не отвечает на вопрос;)

person Gokul NC    schedule 18.10.2016
comment
Как вы заставили его работать с AHBottomNavigation? Я тоже им пользуюсь, но закусочная отображается не над ним, а перед ним :( - person hildegard; 02.06.2017

Это очень просто! в вашем activity_main.xml объявите идентификатор для вашего корневого макета:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/linerMain">

затем в поле view make Snackbar сделайте следующее:

Snackbar snackbar = Snackbar.make(findViewById(R.id.linerMain),"name",Snackbar.LENGTH_INDEFINITE);
person sina akbary    schedule 25.06.2020