Ostatnio użyłem android.support.design.widget.BottomSheetDialogFragment. Chciałem zrobić coś, co jest podobne do aplikacji kontaktowej Google, jej BottomSheet może nakładać się na pasek narzędzi i pasek stanu. Jednak kiedy używam BottomSheetDialogFragment do implementacji tego, okazuje się, że: Wykonaj bottomSheetDialog pełny ekran nad paskiem stanu
Jak widać pasek narzędzi aktywności jest nadal widoczny. Oto mój kod BottomSheetDialogFragment
:
public class KeyDetailFragment extends BottomSheetDialogFragment {
private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismiss();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
};
@Override
public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
View contentView = View.inflate(getActivity(), R.layout.sheet_key, null);
dialog.setContentView(contentView);
View parent = (View) contentView.getParent();
parent.setFitsSystemWindows(true);
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(parent);
contentView.measure(0, 0);
bottomSheetBehavior.setPeekHeight(contentView.getMeasuredHeight());
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) parent.getLayoutParams();
if (params.getBehavior() instanceof BottomSheetBehavior) {
((BottomSheetBehavior)params.getBehavior()).setBottomSheetCallback(mBottomSheetBehaviorCallback);
}
params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
parent.setLayoutParams(params);
}
}
odniosłem się do źródła i znalazłem atrybutem mnie interesuje:
private static int getThemeResId(Context context, int themeId) {
if (themeId == 0) {
// If the provided theme is 0, then retrieve the dialogTheme from our theme
TypedValue outValue = new TypedValue();
if (context.getTheme().resolveAttribute(
R.attr.bottomSheetDialogTheme, outValue, true)) {
themeId = outValue.resourceId;
} else {
// bottomSheetDialogTheme is not provided; we default to our light theme
themeId = R.style.Theme_Design_Light_BottomSheetDialog;
}
}
return themeId;
}
atrybut bottomSheetDialogTheme
tutaj mogą zmienić styl prześcieradło, ale ja nie wiem, jak to zmienić, i wątpię, czy to by działało. Czy ktoś może mi dać rozwiązanie dotyczące osiągnięcia tego, że może on nakładać się na pasek narzędzi i pasek stanu?
W tym samym numerze, znalazłeś jakieś rozwiązanie tego problemu? –
@ nipun.birla Nie, jeszcze go nie znalazłem, chociaż minęło już około 3 miesięcy –
Myślę, że powodem jest wzniesienie. Sprawdź to: http://stackoverflow.com/questions/35711808/android-bottomsheet-is-hinding-under-thebarbar. –