[*]
Код: Выделить всё
RecyclerView, ожидаемое, когда расширяется . Вместо того, чтобы сокращать свою видимую область
, чтобы освободить место для нижнего листа, он остается негабаритным
и перекрывается с нижней областью листа. < /Li>
Код: Выделить всё
BottomSheet< /code> прыжки: на некоторых устройствах нижний лист внезапно
«прыгает» вверх, а затем остается в этом состоянии, пока пользователь
не будет взаимодействовать с экраном. Этот прыжок, по -видимому, происходит во время анимации расширения /коллапса
. наблюдается на стандартных устройствах. Я записал видео о поведении, о котором сообщалось клиентом. В видео, в первые несколько секунд вы можете увидеть проблему переработки Код: Выделить всё
< /code>
BottomSheetКод: Выделить всё
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 onSlideprivate 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
Мобильная версия