3

На Android библиотеки поддержки 24.1.1, то Snackbar работает нормально:Как установить высоту и положение закуски?

before

Затем, начиная от Поддержка Android Библиотека 24.2.0 и далее, Snackbar начал вести себя так:

after

о библиотеке revision history, есть следующее утверждение:

Поведение: Закладка теперь заходит за панель навигации, если строка состояния полупрозрачна.

Но все дело в том, что мое приложение полноэкранное и в нем нет панели навигации или строки состояния. Как я могу это исправить?

+0

вы можете использовать пользовательский макет! http://stackoverflow.com/questions/32453946/how-to-customize-snackbars-layout/33441214#33441214 – xbadal

+0

Не могли бы вы поместить код? По коду я подразумеваю макет из этого действия, весь ваш код закусочной и конфигурацию Gradle. – LeonardoSibela

ответ

4

Посмотрите этот Ансвер https://stackoverflow.com/a/42180120/2550743 и просто заменить

params.setMargins(params.leftMargin, 
      params.topMargin, 
      params.rightMargin, 
      params.bottomMargin + ScreenUtils.getNavigationBarHeight(activity)); 

в

params.setMargins(params.leftMargin, 
      params.topMargin, 
      params.rightMargin, 
      params.bottomMargin - ScreenUtils.getNavigationBarHeight(activity)); 
0

Используйте это в закусочной,

FrameLayout.LayoutParams params =(FrameLayout.LayoutParams)view.getLayoutParams(); 
    params.gravity = Gravity.BOTTOM; 
+0

Это не имеет смысла, но я все равно пытался ... и это не сработало ... – thiagolr

3

Недавно я решил это путем вычитания высоты навигационной панели из нижний край представления Snackbar.

Для начала нам нужна высота навигационной панели. Я нашел код, который в ответ помечается как правильно здесь: How to REALLY get the navigation bar height in Android

Далее используйте следующий код для настройки закусочной нижнего края:

final Snackbar snackbar = Snackbar.make(findViewById(R.id.fullscreen_content), 
       message, Snackbar.LENGTH_LONG); 

View snackbarView = snackbar.getView(); 

// Adjust Snackbar height for fullscreen immersive mode 
int navbarHeight = getNavigationBarSize(this).y; 

CoordinatorLayout.LayoutParams parentParams = (CoordinatorLayout.LayoutParams) snackbarView.getLayoutParams(); 
    parentParams.setMargins(0, 0, 0, 0 - navbarHeight); 
    snackbarView.setLayoutParams(parentParams); 

snackbar.show(); 

Обратите внимание, что я использовал LayoutParams из в CoordinatorLayout. Вы должны заменить CoordinatorLayout на любой тип родительского макета, который вы передали в свою функцию Snackbar.make() (в моем случае R.id.fullscreen_content - это CoordinatorLayout). Хорошая вещь об использовании CoordinatorLayout заключается в том, что он позволяет Snackbars быть уволен, проводя обычное поведение.

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

  • Нет связанных вопросов^_^