1

Я хочу показать BottomSheet над моим BottomBar. Поэтому я должен написать обычай BottomSheetbehavior, который поместит мой BottomSheet выше моего BottomBar - BottomBar имеет shy behavior (избегает во время прокрутки).BottomSheet пользовательское поведение - выше BottomBar

Существует то, что я пытался реализовать:

public class BottomSheetBehavior<T extends View> extends android.support.design.widget.BottomSheetBehavior<T> { 

public BottomSheetBehavior(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { 
    return dependency instanceof BottomBar; 
} 

@Override 
public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { 
    // This will set the Y of my bottom sheet above the bottom bar every time BottomBar changes its position 
    child.setY(dependency.getY() - child.getHeight()); 
    // But I also have to modify the bottom position of my BottomSheet 
    // so the BottomSheet knows when its collapsed in its final bottom position. 
    child.setBottom((int) dependency.getY() - dependency.getHeight()); 
    return false; 
} 

} 

До сих пор это решение не полностью функционален. Я могу положить BottomSheet выше BottomBar с помощью метода setY(). Но разрастание и разрушение работают неправильно. Поэтому я попытался изменить нижнюю часть BottomSheet с помощью метода setBottom() Но он не работает ни. Возможно, это из-за неправильных единиц (px vs dp).

Может кто-нибудь помочь мне исправить мой код или хотя бы дать мне подсказку, что именно я делаю неправильно или что мне не хватает?

ответ

1

Итак, я вышел своим решением. Она работает прекрасно, хотя и были некоторые проблемы, которые должны быть решены - такие, как тени выше BottomBar или Hidding BottomBar когда BottomSheet является expadned и т.д ..

Для тех, кто сталкивается с такой же или подобной проблемой, есть мое решение.

public class MyBottomSheetBehavior<T extends View> extends android.support.design.widget.BottomSheetBehavior<T> { 

    private boolean mDependsOnBottomBar = true; 

    public MyBottomSheetBehavior(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean layoutDependsOn(CoordinatorLayout parent, T child, View dependency) { 
     return (dependency instanceof BottomBar) || super.layoutDependsOn(parent, child, dependency); 
    } 

    @Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, T child, View dependency) { 
     if (dependency instanceof BottomBar) { 

      BottomBar bottomBar = (BottomBar) dependency; 

      if (mDependsOnBottomBar) { 
       //TODO this 4dp margin is actual shadow layout height, which is 4 dp in bottomBar library ver. 2.0.2 
       float transitionY = bottomBar.getTranslationY() - bottomBar.getHeight() 
        + (getState() != STATE_EXPANDED ? Utils.dpToPixel(ContextProvider.getContext(), 4L) : 0F); 
       child.setTranslationY(Math.min(transitionY, 0F)); 
      } 

      if (bottomBar.getTranslationY() >= bottomBar.getHeight()) { 
       mDependsOnBottomBar = false; 
       bottomBar.setVisibility(View.GONE); 
      } 
      if (getState() != STATE_EXPANDED) { 
       mDependsOnBottomBar = true; 
       bottomBar.setVisibility(View.VISIBLE); 
      } 

      return false; 
     } 
     return super.onDependentViewChanged(parent, child, dependency); 
    } 
} 
+0

Как бы вы шли на изменение высоты нижнего бруса или нижнего листа, а не переноса x или y? Я ищу способ гарантировать, что контейнер с фрагментами, который у меня есть, не покрывается моим нижним листом, когда нижний лист находится в его сложенном состоянии. Любые мысли оценили! –

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

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