Recentemente ho utilizzato android.support.design.widget.BottomSheetDialogFragment. Volevo fare qualcosa che fosse simile all'app di contatto Google, il suo BottomSheet può sovrapporre la barra degli strumenti e la barra di stato. Tuttavia, quando uso il BottomSheetDialogFragment per implementare questo, si scopre questo: Imposta bottomSheetDialog a schermo intero sulla barra di stato
Come si può vedere la barra degli strumenti dell'attività è ancora visibile. Ecco il mio codice del 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);
}
}
ho fatto riferimento alla fonte e ho trovato un attributo mi interessa:
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;
}
l'attributo bottomSheetDialogTheme
qui può cambiare lo stile del foglio di fondo, ma io no sapere come cambiarlo, e dubito che questo funzionerebbe. Qualcuno può darmi una soluzione per raggiungerlo che può sovrapporre la barra degli strumenti e la barra di stato?
Stesso problema, hai trovato qualche soluzione a questo? –
@ nipun.birla No, non l'ho ancora trovato sebbene fosse passato per circa 3 mesi –
Penso che il motivo sia l'elevazione. Verifica questo: http://stackoverflow.com/questions/35711808/android-bottomsheet-is-hinding-under-the-toolbar. –