Dmytro
https ))
Daniel
От родительской
Daniel
Снэкбар прибивается к координатор лайоуту или к decorview
Daniel
Ты показываешь на диалоге
Daniel
А хочешь, чтобы отобразился на родительском фрагменте
Daniel
Вот и передай в Snackbar.make() вьюху родительского фрагмента
Dmytro
BottomSheetDialogFragment не?
Anton
я ее к координатору цепляю
Daniel
Наверное это фон активности, на которой показываешь свой даилог
Daniel
Вот от активности и покажи снэкбар
Daniel
Тогда он (снэкбар) растянется на всю ширину decorView активности
Daniel
Те на всю ширину экрана
Anton
а лол, это крч скрин с гугла скрин, я говорю так же растянуть хочу)))
Anton
Anton
Anton
У меня она с отступами, вот хочу что б плотно прижималась
Daniel
(snackbar.view as Snackbar.SnackbarLayout).apply { setWidth(MATCH_PARENT) setHorizontalMargin(0) setPadding(0, 0, 0, 0) }
Daniel
Удачи)
Anton
подскажи что не так? до width не могу достучаться и horizontalMargin, пробовал по разносу комбинировать
Daniel
width задай через layoutparams
Daniel
margins тоже через MarginLayoutParams
Daniel
Заодно узнаешь что это)
Anton
margins тоже через MarginLayoutParams
Сделал вот так, сверху прижалось!!!)) Спасибо, теперь дальше буду копать что б ширину увеличить)
Daniel
Супер, молодец что разобрался)
Daniel
Немного улучшу твой код. Надежнее написать вот так, чтобы обязательно вызвался setLayoutParams() у вьюшки this.layoutParams = (layoutParams as MarginLayoutParams).apply { width = MATCH_PARENT setMargins(0, 0, 0, 0) } setPadding(0, 0, 0, 0)
Daniel
Еще можно посмотреть layout inspector-ом, на какой именно вьюшке стоят маргины/паддинги
Anton
благодарю!!)) буду разбираться!)
Anton
если в краце, то почему через apply надежней?
Mike
в краце — это где?)
Anton
вкратце
Daniel
Надежней не apply, а присвоение this.layoutParams после их изменения
Daniel
У вьюхи есть методы getLayoutParams и setLayoutParams
Daniel
Когда ты меняешь параметры, полученные с помощью getLayoutParams(),
Daniel
Лучше проставить их обратно методом setLayoutParams()
Daniel
А в котлине джавовый метод setLayoutParams() вызывается как this.layoutParams =
Daniel
Это все нужно чтобы гарантированно вызвался view.requestLayout() и вьюха перемежрилась и заново отрисовалась
Anton
если this убрать эффект будет не тот?
Daniel
(snackbar.view as Snackbar.SnackbarLayout).apply { layoutParams = (layoutParams as MarginLayoutParams).apply { width = MATCH_PARENT setMargins(0, 0, 0, 0) } setPadding(0, 0, 0, 0) }
Daniel
Я бы вот так написал)
Daniel
this можно убрать в этом примере
Daniel
Потому что мы работаем в контексте объекта приемника (во внешней лямбде)
Anton
благодарю!)
Daniel
А это как раз snackbar.view
Daniel
val snackbarView = snackbar.view as Snackbar.SnackbarLayout (snackbarView.layoutParams as MarginLayoutParams).apply { width = MATCH_PARENT setMargins(0, 0, 0, 0) } snackbarView.setPadding(0, 0, 0, 0) snackbarView.requestLayout
Daniel
Вот эквивалентный код
Daniel
snackbarView.requestLayout на самом деле вызовется в setPadding и необязателен (до тех пор, пока ты не удалишь setPadding 🙂
Anton
шикарно!))
Anton
Daniel
Посмотри лайоут инспектором
Daniel
У какой вьюхи эти боковые паддинги
Daniel
Достань эту вьюху из иерархии и убери паддинги/маргины/поставь MATCH_PARENT
Daniel
вот такой план)
Anton
10/10
OK
Никто не сталкивался с проблемой совместной работы SwipeRefreshLayout/RecyclerView с ItemTouchHelper, после пары отключений и включений SwipeRefreshLayout свайп вниз для обновления перестает работать
OK
Точнее после пары drag'n'drop элементов внутри RecylcerView, SwipeRefreshLayout перестает работать
OK
Также есть, addOnScrollListener на RecyclerView, она отключает когда первый элемент виден, включает когда скроллишь вниз уже. При этом, когда свайп вниз перестает работать, отлавливал состояние SwipeRefreshLayout, он включен
OK
https://stackoverflow.com/help/mcve
Понял... попробую, придумать насчет кода...
OK
Проект включает много кода
Daniel
Больше не подскажу по такому описанию
OK
Можно попробовать nestedScrollingEnabled=false
Спасибо за совет, попробую в этом направлении
Alexey
Народ, а если в ответе от сервера может быть json любого вида, и из него нужно достать по ключю url(если он вообще будет) каким образом pojo тогда создавать?
Сергей
Если там вообще могут прислать неизвестно что, включая malformed - почему бы ии нет
Alexey
кстати, кто убедил в том, что всегда надо POJO?
Сталкивал токо с этим до этого, а теперь нужно получать JSON с сервера и если в нем есть url то открыть его в webView
OK
Больше не подскажу по такому описанию
Попробую по другому. Скроллинг и включение элемента SwipeRefreshLayout делал следующим образом: mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { int topRowVerticalPosition = (recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop(); swipeRefreshLayout.setEnabled(topRowVerticalPosition >= 0); } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } }); Везде работает. Но когда внутри Fragment еще включил ItemTouchHelper, для drag'n'drop элементов внутри RecyclerView, данный способ перестает работать для SwipeRefreshLayout После пары drag'n'drop элементов RecylerView перестает вызываться onRefresh, SwipeRefreshLayout. Хотя по последнему статусу он включен
Сергей
Ну да, потом с объекта getJsonString Если ключ известен
OK
Drag'n'drop элементов RecyclerView сделал на основе следующего ресурса: https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-6a6f0c422efd С применением ItemTouchHelper, свайп в сторону отключен, использую только перемещение элементов RecyclerView
Daniel
SwipeToDeleteItemTouchHelper( onStartSwipe = { refresh.isEnabled = false }, //to prevent pull-to-refresh from processing swiping events onFinishSwipe = { refresh.isEnabled = true }, onSwiped = { item, position ->…}, adapter = adapter, contentViewExtractor = { it?.findViewById(R.id.lFilterContent) } ).attachToRecyclerView(recyclerView)
Daniel
Вот такое еще дам