2015-07-15 3 views
9

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

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

floating button too low

Это расположение 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. Смотрите это изображение. Это аналогичный макет. КоординаторLayout с ToolBar и ViewPager, который просматривает все детализированные записи (поэтому никаких вкладок не требуется). И снова внутренний вид кажется слишком длинным (такая же высота, как и ToolBar).

enter image description here

+0

Просьба разместить схему фрагмента, которая включает в себя FAB – doubleA

+0

см. Обновленное сообщение – Matthias

+0

Хорошо, что вы можете добавить маркер к нижней части FAB, и он поднимет его, но насколько я знаю, это не должно происходить. Что происходит, когда вы удаляете изображение src и используете значение по умолчанию? – doubleA

ответ

3
  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. Я столкнулся с той же проблемой, когда viewpager перекрывает кнопки системы. Я исправил это, просто добавив эту зависимость.
+1

RecyclerView глючит, как черт. – Matthias

+1

КоординаторLayout не будет работать с ListView. Я использую RecyclerView в своих проектах и ​​никогда не использую У вас возникли ошибки, если вы не используете их неправильно. –

+0

Использование «RecyclerView» сделало трюк для меня – Roman

1

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

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

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

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

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

Или:

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

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

Смежные вопросы