Непоследовательный BottomSheetBehavior: Прыжок и переработка и переработка.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Непоследовательный BottomSheetBehavior: Прыжок и переработка и переработка.

Сообщение Anonymous »

Я испытываю противоречивое поведение с домом Android в доме Android на некоторых устройствах. Мое макет приложения содержит координаторный с Appbarlayout , основным Recyclerview и включенным домом . Предполагаемое поведение состоит в том, что когда промежуточный расширяется, я настраиваю нижнюю накладку переоценки recyclerview динамически (в обратном вызове bothersheetbehavior ) так, чтобы переработка изменяется и остается полностью видимым над нижним листом. Тестовые устройства: < /p>

[*]

Код: Выделить всё

RecyclerView
Изменение размера: иногда Recyclerview не изменяет размер как
, ожидаемое, когда расширяется . Вместо того, чтобы сокращать свою видимую область
, чтобы освободить место для нижнего листа, он остается негабаритным
и перекрывается с нижней областью листа. < /Li>

Код: Выделить всё

BottomSheet< /code> прыжки: на некоторых устройствах нижний лист внезапно
«прыгает» вверх, а затем остается в этом состоянии, пока пользователь
не будет взаимодействовать с экраном. Этот прыжок, по -видимому, происходит во время анимации расширения /коллапса
. наблюдается на стандартных устройствах. Я записал видео о поведении, о котором сообщалось клиентом. В видео, в первые несколько секунд вы можете увидеть проблему переработки 
Изменение размера, а после 1:30. это упрощенная версия моего макета и кода поведения: < /p>

Код: Выделить всё















< /code>
BottomSheet
Layout (упрощенное):

Код: Выделить всё

android:background="#FFFFFF"
android:elevation="5dp"
android:orientation="vertical"
app:behavior_hideable="false"
app:behavior_peekHeight="56dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"







< /code>
The onSlide
:
private final BottomSheetBehavior.BottomSheetCallback bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() {
private int lastBottomPadding = -1;

@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
scrollProductsToBottom();
}
}

@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
int bottomPadding = getBottomPadding(bottomSheet, slideOffset);

// Update padding only if it has changed to reduce redundant layout passes.
if (bottomPadding != lastBottomPadding) {
lastBottomPadding = bottomPadding;
int leftPadding = recyclerProdotti.getPaddingLeft();
int topPadding = recyclerProdotti.getPaddingTop();
int rightPadding = recyclerProdotti.getPaddingRight();
recyclerProdotti.setPadding(leftPadding, topPadding, rightPadding, bottomPadding);
}

// Smooth scroll to the last item, throttled
if (slideOffset > 0.9) {
scrollProductsToBottom();
}
}

private int getBottomPadding(View bottomSheet, float slideOffset) {
int extraPadding = (int) (80 * recyclerProdotti.getContext().getResources().getDisplayMetrics().density);
// Calculate the dynamic bottom padding based on the bottom sheet's state.
// Here bottomSheet.getPeekHeight() is the starting padding,
// and we add a proportion of the remaining space as the sheet slides.
int bottomPadding = (int) (bottomSheetTasti.getPeekHeight() +
slideOffset * (bottomSheet.getHeight() - bottomSheetTasti.getPeekHeight()));

// Add the extra 80dp in pixels
bottomPadding += extraPadding;
return bottomPadding;
}
};
< /code>
  • Что может привести к тому, что нижний лист будет «прыгать» вверх на некоторых устройствах
    до взаимодействия с пользователем? Я гарантировал, что нижний лист имеет фиксированную высоту
    (406DP) и использовал правильные атрибуты BottomSheetBehavior < /code>
    . Могут ли быть специфичные для устройства причуды или время жизненного цикла
    проблемы, вызывающие этот прыжок? Я корректирую
    его нижняя накладка во время обратного вызовов, но изменение не применяется
    . Может ли это быть связано с фиксированной высотой нижнего листа
    или других взаимодействий макета в рамках
    координаторное плавание? > на
    определенные версии Android/устройства?
Любые идеи, советы по отладки или потенциальные обходные пути будут высоко оценены!

Подробнее здесь: https://stackoverflow.com/questions/794 ... ails-to-re
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»