У меня есть MainActivity XML, содержащий bottomNavigationView (панель) с 5 вкладками. Каждая вкладка вызывает отдельный фрагмент. Переключение от фрагмента со сворачивающейся панелью инструментов в его XML (помечено A на рисунке) к фрагменту с простым фрагментом (помечено B на рисунке) приводит к тому, что bottomNavigationView (полоса) частично скрывается за экраном.

Есть ли способ предотвратить это?

Экран с фрагментом сворачивающейся панели инструментов.

Link: screen with fragment containing collapsing toolbar

Скрин другой вкладки с незамысловатым фрагментом.

Link: screen of another tab with a plain fragment

Класс фрагмента, содержащий код для сворачивания панели инструментов

 public class Profile extends Fragment {

    public Profile() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //setHasOptionsMenu(true);

        View rootView = inflater.inflate(R.layout.fragment_profile, container, false);

        Toolbar toolbar = rootView.findViewById(R.id.toolbar);

        AppCompatActivity activity = (AppCompatActivity) getActivity();
        activity.setSupportActionBar(toolbar);
        activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        CollapsingToolbarLayout collapsingToolbar = rootView.findViewById(R.id.collapsing_toolbar);
        collapsingToolbar.setTitle("test");

        return rootView;
    }

Соответствующий xml, содержащий код сворачивающейся панели инструментов

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/header"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/ani_dog_one"
                android:contentDescription="whut"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin" />
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

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

Класс простого фрагмента

public class Review extends Fragment {

 public Review() {
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_review, container, false);
        //setHasOptionsMenu(true);
        return rootView;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.search_bar_menu, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

XML для класса простого фрагмента содержит только простой FrameLayout

Основное занятие

public class MainActivity extends AppCompatActivity {

private Intent intent;

private android.support.v4.app.FragmentManager manager;
private android.support.v4.app.FragmentTransaction transaction;

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

    manager = getSupportFragmentManager();          
    transaction = manager.beginTransaction();      

    Discover discoverFragment = new Discover();
    transaction.replace(R.id.container, discoverFragment, discoverFragment.getTag()).commit();

    setupBottomNavigationView();

}

private void setupBottomNavigationView() {

BottomNavigationViewEx bottomNavigationViewEx = (BottomNavigationViewEx) findViewById(R.id.bottom_navigation);
BottomNavigationViewHelper.setupBottomNavigationView(bottomNavigationViewEx);
BottomNavigationViewHelper.enableNavigation(this, bottomNavigationViewEx);

}

public void goToOptions(MenuItem menu) {

 intent = new Intent(this, Options.class);
overridePendingTransition(R.anim.left_in, R.anim.right_out);
startActivity(intent);
}

}

XML для MainActivity

    <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"
        tools:context="com.example.android.project_qwer.MainActivity">

    <!-- main fragments goes here -->
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

    </FrameLayout>

    <!-- bottom navigation view -->
    <com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="?android:attr/windowBackground"
        app:menu="@menu/bottom_navigation_menu" >

    </com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx>

</LinearLayout>
4
ben 23 Июл 2017 в 20:26
1
 – 
user7627726
24 Июл 2017 в 03:33
Привет, @ben, не могли бы вы сузить круг своей проблемы и опубликовать только код, относящийся к строке, в которой вы проследили ошибку? Это очень поможет, так как ваш пост слишком длинный, и многие пользователи не захотят ему помочь.
 – 
DarkCygnus
24 Июл 2017 в 03:36
Хм, вот в чем проблема, программа работала как обычно, за исключением того, что нижний вид навигации частично скрывается каждый раз, когда я отключаюсь от вкладки A (на картинке). Эта проблема возникла сразу после того, как я добавил складную панель инструментов во фрагмент вкладки A, но связанного сообщения об ошибке нет. Таким образом, я привел весь код, который может быть связан с проблемой, и да, я знаю, что это много. Чтобы помочь, bottomNavView находится в основном действии xml, сворачивающаяся панель инструментов находится во фрагменте на вкладке A, а простой класс фрагмента является просто примером того, когда я переключаюсь на другую вкладку и возникает проблема. @GrayCygnus
 – 
ben
24 Июл 2017 в 15:18
Ты нашел решение? Я столкнулся с той же проблемой.
 – 
BekaBot
23 Мар 2018 в 12:01

5 ответов

Попробуй удалить

андроид : fitsSystemWindows = " истина"

На вашем CollapsingToolbarLayout.

1
Jordan Gout 24 Авг 2017 в 13:33

Пытаться

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

При переходе на вкладку с сворачивающейся панелью инструментов и

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

При переключении на другой

1
Nikita Fedrunov 11 Сен 2017 в 15:36

Попробуй поставить

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

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

Как корень всех остальных фрагментов, загружаемых из BottomNavigationView.

0
rtugores 15 Май 2018 в 18:27

Если вы используете настраиваемую панель инструментов во фрагменте профиля, вы помещаете этот код в метод onCreateView:

((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);

У меня была такая же проблема, и она была решена.

0
maryam 21 Мар 2019 в 23:23

Удалить android:fitsSystemWindows="true" из корня CoordinatorLayout.

0
xskxzr 30 Мар 2019 в 08:54