CoordinatorLayout перекрывается

Взгляните на следующий макет. Вы увидите, что плавающая кнопка находится слишком далеко внизу. Это связано с тем, что отображаются панель инструментов и вкладки, а высота ViewPager неверна. Так что как-то я делаю что-то не так с layout_height. Но как я могу это исправить?

Примечание: ViewPager является основным содержимым и содержит фрагмент с ListView и Google Map V2 на второй вкладке.

плавающая кнопка находится слишком низко

Это макет XML:

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

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

        <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways" />

        <android.support.design.widget.TabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

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

    <android.support.v4.view.ViewPager
            android:id="@+id/pager_list_views"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:layout_width="match_parent"
            android:layout_height="fill_parent">
    </android.support.v4.view.ViewPager>

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

Вот макет для фрагмента в первой вкладке (список):

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

    <ListView
              android:id="@+id/preview_list"
              app:layout_behavior="@string/appbar_scrolling_view_behavior"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:choiceMode="singleChoice"
              android:orientation="vertical" />

    <android.support.design.widget.FloatingActionButton
            android:id="@+id/action_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end|bottom"
            android:layout_margin="16dp"
            android:src="@mipmap/ic_add_white_48dp" />

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

Просто чтобы убедиться; это не проблема с FAB. Смотрите эту картинку. Это аналогичный макет. CoordinatorLayout с ToolBar и ViewPager, который пролистывает все подробные записи (поэтому вкладки не нужны). И снова внутренний вид кажется слишком длинным (той же высоты, что и панель инструментов).

введите здесь описание изображения


person Matthias    schedule 15.07.2015    source источник
comment
Пожалуйста, опубликуйте макет фрагмента, который включает в себя FAB   -  person doubleA    schedule 16.07.2015
comment
Ну, ясно, что вы можете добавить маржу в нижнюю часть FAB, и она поднимет ее, но, насколько я знаю, этого не должно происходить. Что происходит, когда вы удаляете образ src и используете изображение по умолчанию?   -  person doubleA    schedule 16.07.2015
comment
С кнопкой все в порядке, как и с ее изображением. Проблема заключается в высоте контейнера, в котором находится FAB. Поле снизу одинаково справа и снизу. И если я отключу панель инструментов, она выглядит нормально.   -  person Matthias    schedule 16.07.2015
comment
Я не говорил, что с этим что-то не так, я пытаюсь помочь и изучаю все возможные решения. Вы никогда не узнаете, в чем проблема, пока не узнаете решение, и именно поэтому вы здесь. Если вы думаете, что это не проблема, сделайте это, и тогда вы узнаете.   -  person doubleA    schedule 16.07.2015
comment
пассивный дубликат   -  person doubleA    schedule 16.07.2015
comment
спасибо за подсказку про дубликат, но это не так. мой FAB не имеет смысла в действии, потому что тогда он также будет виден на карте. и, похоже, это проблема с CoordinatorLayout, потому что у меня есть другой макет, где внутренний фрагмент представляет собой что-то еще (без представления списка и без FAB), и часть этого фрагмента также перекрывает дно. поэтому должна быть проблема с CoordinateLayout или ToolBar :(   -  person Matthias    schedule 16.07.2015
comment
Я добавил изображение, если у другого представления такая же проблема, но не FAB.   -  person Matthias    schedule 16.07.2015
comment
Проблема в том, что в viewpager есть match_parent. Вы нашли какое-нибудь решение?   -  person Nick    schedule 05.11.2015
comment
Нет, я не нашел решения. Ни один из подходов не работал. В итоге я не использовал CoordinatorLayout.   -  person Matthias    schedule 06.11.2015
comment
У меня аналогичная проблема, только с использованием других представлений (например, NestedScrollView) - при использовании CoordinatorLayout с панелью инструментов основное содержимое перемещается вниз по высоте панели инструментов и не помещается на экране. Прокрутка панели инструментов работает. Если убрать CoordinatorLayout, то все хорошо вписывается в размер экрана. Такие решения, как обновление версии lib, вообще не помогают.   -  person khusrav    schedule 24.12.2015


Ответы (2)


  1. Вы должны использовать android.support.v7.widget.RecyclerView, а не ListView
  2. Хотя вы уже используете android.support.v7.widget.RecyclerView, будьте на 100% уверены, что вы объявили compile 'com.android.support:recyclerview-v7:23.0.0' в своих зависимостях build.gradle. Я столкнулся с той же проблемой, когда окно просмотра перекрывает системные кнопки. Я исправил это, просто добавив эту зависимость.
person Mark Pazon    schedule 18.08.2015
comment
RecyclerView чертовски глючит. - person Matthias; 24.08.2015
comment
CoordinatorLayout не будет работать с ListView. Я использую RecyclerView в своих проектах и ​​никогда не сталкивался с ошибками, если только вы не используете его неправильно. - person Mark Pazon; 25.08.2015

Все, что вам нужно «координировать», должно быть прямым дочерним элементом CoordinatorLayout, включая AppBar, RecyclerView (ListView в API21+ или другое представление, поддерживающее вложенную прокрутку, в порядке) или FAB и т. д.

Причина, по которой ваш FAB смещается за пределы экрана, заключается в следующем:

  1. ViewPager имеет @string/appbar_scrolling_view_behavior, реализация этого поведения будет смещать вид при прокрутке.
  2. вы помещаете FAB внутрь ViewPager.

Таким образом, когда смещение ViewPager изменилось, все, что находится внутри ViewPager, будет смещено вместе (лишнее CoordinatorLayout не поможет изменить смещение).

Чтобы это исправить, не используйте CoordinatorLayout вне ViewPager.

Or:

  1. Поместите FAB вне ViewPager, чтобы он не прокручивался с ViewPager.
  2. Если FAB работает только с какой-то частью вашей страницы, hide() при необходимости.

Кстати, есть очень хорошее приложение пример Cheesesquare для демонстрации библиотеки дизайна.

person Tankery    schedule 05.06.2016