Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Разные отступы Floating Action Button(fab) в разных версиях Android

#android #material_design


Здраствуйте! 
Есть така проблема: нужно разместить 2 Floating Action Buttons c привязкой к правому
нижнему углу с задаваемым margin между ними. Наглядный пример - Google Maps.
Гугл привел меня к такой ссылке, где описано именно то, что мне нужно. Но делая по
примеру, я обнаружил, что на своем телефоне(скрин 1, android 4.2) и на другом (скрин
2, android 5.0.2) есть разбежности. Думаю, здесь нужно баловаться с dimens.xml and
styles.xml для каждой версии API(а различия между x<20 & x >= 20).  

Приведу код:

 




 

P.S. Как видите, разница большая. Интересует как указать margin между кнопками по
вертикали? Задавал их, но не работает(наверное через anchor).
    


Ответы

Ответ 1



Solution Взяв за основу ответ @shwarz-andrei, я начал экспериментировать со своей задачей. Итого, у меня получилось(хотя тестировал только на двух вышесказанных девайсах). И так, начнём. Для начала я обьявил константы в values/dimens.xml: 16dp 16dp 16dp 32dp 4dp ... в values-v21/dimens.xml соотвествено: 16dp 16dp 8dp 64dp 8dp Код разметки: Результат: всё заработало так, как мне нужно было, а именно - одинаковое отображение двух FAB на разных версиях Android(в моём случае - Android 4.2 и 5.0.1).

Ответ 2



Я такую задачу решил, программно задав положение кнопки для версий 5+: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { fab.setLayoutParams(getFabLayoutParams()); } private RelativeLayout.LayoutParams getFabLayoutParams() { RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ABOVE,fab2) lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); lp.bottomMargin = 20; lp.rightMargin = 20; return lp; } По умолчанию - margin=0 (для версий меньше 5ой отступ выставляется сам).

Ответ 3



CoordinatorLayout использует anchor, чем-то похоже на привязки как в RelativeLayout, попробуйте сделать кастомный разделитель, привязать (приякорить:) его к нижней fab, а второй fab2 уже к этому разделителю, вот такой пример: где высота divider и будет расстояние между двумя fab по вертикали.

Комментариев нет:

Отправить комментарий