Optimize BottomSheetDialog window

fongmi
jhengazuki 1 month ago
parent 102324ea6d
commit 9c608396be
  1. 16
      app/src/main/java/com/fongmi/android/tv/ui/dialog/BaseDialog.java
  2. 2
      app/src/main/java/com/fongmi/android/tv/utils/Util.java

@ -1,5 +1,6 @@
package com.fongmi.android.tv.ui.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Build;
@ -7,6 +8,7 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
@ -57,8 +59,8 @@ public abstract class BaseDialog extends BottomSheetDialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
dialog.setOnShowListener((DialogInterface f) -> setBehavior(dialog));
setWindow(dialog);
return dialog;
}
@ -70,6 +72,18 @@ public abstract class BaseDialog extends BottomSheetDialogFragment {
behavior.setSkipCollapsed(true);
}
private void setWindow(Dialog dialog) {
Activity activity = getActivity();
if (activity == null || dialog == null) return;
Window dialogWindow = dialog.getWindow();
Window activityWindow = activity.getWindow();
if (activityWindow == null || dialogWindow == null) return;
int activityFlags = activityWindow.getAttributes().flags;
dialogWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
boolean isFullscreen = (activityFlags & WindowManager.LayoutParams.FLAG_FULLSCREEN) == WindowManager.LayoutParams.FLAG_FULLSCREEN;
if (isFullscreen) dialogWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
@Override
public void onStart() {
super.onStart();

@ -48,6 +48,7 @@ public class Util {
public static void hideSystemUI(Window window) {
WindowInsetsControllerCompat insets = WindowCompat.getInsetsController(window, window.getDecorView());
insets.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
insets.hide(WindowInsetsCompat.Type.systemBars());
}
@ -57,6 +58,7 @@ public class Util {
public static void showSystemUI(Window window) {
WindowCompat.getInsetsController(window, window.getDecorView()).show(WindowInsetsCompat.Type.systemBars());
window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
public static void showKeyboard(View view) {

Loading…
Cancel
Save