BIG UPDATE Unikanie kod powielony ja daję link do full answer w którym cię może znaleźć wszystkie wyjaśnienia, jak uzyskać pełne zachowanie, takie jak Mapy Google.
Chcę dostosować to maksymalna wysokość rozszerzony. Jak mogę to zrobić?
Zarówno BottomSheet
i BottomSheetDialogFragment
użyć BottomSheetBehavior, które można znaleźć w Bibliotece Wsparcia 23.X
To klasa Java ma 2 różnych zastosowań dla mMinOffset
, jeden z nich jest używany do definiowania obszaru rodzic użyje go do narysowania swojej zawartości (być może NestedScrollView
). A drugi, jeśli zdefiniujesz rozwinięty punkt kontrolny, to znaczy, jeśli wysuniesz go z STATE_COLLAPSED
, ożywisz swój BottomSheet
, aż dotrze do tego punktu zakotwiczenia, ALE jeśli nadal będziesz mógł przesuwać się do góry, aby pokryć całą wysokość rodziców (wysokość CoordiantorLayout) .
Jeśli przyjrzał BottomSheetDialog
widać tą metodą:
private View wrapInBottomSheet(int layoutResId, View view, ViewGroup.LayoutParams params) {
final CoordinatorLayout coordinator = (CoordinatorLayout) View.inflate(getContext(),
android.support.design.R.layout.design_bottom_sheet_dialog, null);
if (layoutResId != 0 && view == null) {
view = getLayoutInflater().inflate(layoutResId, coordinator, false);
}
FrameLayout bottomSheet = (FrameLayout) coordinator.findViewById(android.support.design.R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setBottomSheetCallback(mBottomSheetCallback);
if (params == null) {
bottomSheet.addView(view);
} else {
bottomSheet.addView(view, params);
}
// We treat the CoordinatorLayout as outside the dialog though it is technically inside
if (shouldWindowCloseOnTouchOutside()) {
final View finalView = view;
coordinator.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (isShowing() &&
MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_UP &&
!coordinator.isPointInChildBounds(finalView,
(int) event.getX(), (int) event.getY())) {
cancel();
return true;
}
return false;
}
});
}
return coordinator;
}
Nie mam pojęcia, który z tych 2 zachowań chcesz, ale jeśli trzeba drugi wykonaj te kroki :
- Utwórz klasę Java i przedłużyć go od
CoordinatorLayout.Behavior<V>
- Skopiuj kod wklejania z domyślnego pliku
BottomSheetBehavior
do nowego.
zmodyfikować metodę clampViewPositionVertical
z następującego kodu:
@Override public int clampViewPositionVertical (zobacz dziecko, int góra, int dy) { powrót ograniczeniem (góra, mMinOffset, mHideable mParentHeight: mMaxOffset); } int constrain (kwota int, int low, int high) { kwota zwrotu < niskie? niska: (ilość> wysoka?duża ilość); }
Dodaj nowy stan
public static final int STATE_ANCHOR_POINT = X;
Modyfikacja kolejnych metod: onLayoutChild
, onStopNestedScroll
, BottomSheetBehavior<V> from(V view)
i setState
(opcjonalnie)
A oto jak jego wygląd jak:
[
]
znalazłeś rozwiązanie? – abat
Chciałbym wiedzieć, że ** jak ustawić "maks. Wysokość" dla "modalnego dolnego arkusza"? **. Potrzebuję mojego modalnego dolnego arkusza, aby przejść do ekranu pół ekranu i nigdy do góry, nawet po przeciągnięciu ... Jakieś wskazówki? – eRaisedToX