Intereting Posts
AlarmManager запускает аварийные сигналы в неподходящее время Светится при касании экрана в андроиде? Как создать намерение, открывающее активность журнала вызовов? Когда вы вызываете initLoader во Фрагменте? Выполнять запросы с помощью «Дооснащения» внутри пользовательского Runnable Экран ускорителя эмулятора intel x86 (установщик HAXM) версии 6.0.5 показывает, что он несовместим с окнами Запуск кода в основном потоке из другого потока Android: лучший способ сохранить данные, хранящиеся в приложении Singleton Class Как всегда запускать службу в фоновом режиме? Почему Android AsyncTask не реализует будущее? Манифест для экранирования экрана Как сделать вкладки для ViewPager теперь, когда вкладки ActionBar устарели (Lollipop) «Родной шрифт не может быть создан» только для некоторых людей CookieSyncManager :: createInstance () необходимо вызвать до CookieSyncManager :: getInstance () Как использовать Android ProgressBar в детерминированном режиме?

Как заставить FAB не перемещаться в ViewPager, но быть частью фрагмента внутри?

Задний план

В соответствии с рекомендациями по материальному дизайну ( здесь ), если вы используете ViewPager, у которого есть FAB (кнопка с плавающим действием) для фрагментов внутри, FAB не должен перемещаться как часть фрагментов, но либо исчезает, либо заменяется другим , Или оживить что-то еще.

Короче говоря, вместо этого:

Вы должны сделать это:

Проблема

Я не вижу ни одного примера или учебника о том, как лучше всего это выполнить.

Я имею в виду, что FAB для каждого фрагмента (или некоторых из них) в ViewPager, в то время как каждый из них будет контролироваться его фрагментом (логикой и тем, как он выглядит), но FAB не будет действительно перемещаться как часть фрагмента при сдвиге Между фрагментами в ViewPager.

Даже в качестве примеров приложений я не вижу такого поведения нигде. Приложение для контактов имеет тот же FAB для обоих фрагментов, и у дозвона есть только FAB.

Есть даже приложения, которые используют плохое поведение (например, Solid-Explorer). На YouTube есть FAB (в фрагменте «Учетная запись»), но он находится в заголовке, так что, возможно, все в порядке.

Вопрос

Как следует реализовать правильное поведение? Вы действительно положили бы FAB как часть активности вместо фрагментов?

Может быть, учебник и / или образец об этом?

Может быть, когда ViewPager начнет прокрутку, я могу отсоединить FAB и прикрепить его к активности, оживить во время прокрутки, и когда это будет прокрутка, я могу скрыть его и показать один из другого фрагмента?

Solutions Collecting From Web of "Как заставить FAB не перемещаться в ViewPager, но быть частью фрагмента внутри?"

Я столкнулся с такой же проблемой с viewpager и fab немного времени назад, и я решил таким образом:

  • Прикрепите fab к активности над viewpager
  • Добавьте OnPageChangeListener в ViewPager и сохраните onPageSelected(int position) в глобальной переменной в вашей деятельности
  • В onPageSelected запустите onPageSelected вашего fab (она может быть как xml, так и программно, я сделал это с xml) и изменил его colorTint
  • В вашем OnClickListener onClick(View v) когда вы извлекаете файл (или представление) вашего fab, чтобы определить, какое действие вы должны выполнить, вы можете создать оператор switch с положением, которое вы получите до этого в onPageSelected

РЕДАКТИРОВАТЬ

Это мои два файла anim.xml, которые я пытался создать схожими с рекомендациями для Android:

Анимировать, чтобы исчезнуть старый fab:

 <?xml version="1.0" encoding="utf-8"?> <set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="0.0" android:fromYScale="1.0" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="200" /> <rotate android:duration="200" android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="360" android:toDegrees="270" /> </set> 

Анимация, чтобы показать новую:

 <?xml version="1.0" encoding="utf-8"?> <set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="200" /> <rotate android:duration="200" android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="270" android:toDegrees="360" /> </set>