在AlertDialog/LoginDialog期间无法隐藏导航栏

use*_*761 6 java android uinavigationbar navigationbar android-alertdialog

我试图通过运行Android 4.2.2的应用程序全局隐藏导航栏

我设法使用以下(admitadly hackish)方法实现:

getWindow().getDecorView().setSystemUiVisibility(8);
Run Code Online (Sandbox Code Playgroud)

哪个成功删除了导航栏(它是hackish的事实非常好 - 这是一个自助服务终端所以它只会安装在有限数量的设备上)

现在我试图在MainActivity之外的地方删除导航栏 - 例如在AlertDialog/LoginDialog期间重新出现的位置.

我正在尝试使用:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(),R.style.HoloDarkDialog));
    LayoutInflater inflater = getActivity().getLayoutInflater();

    variables = SingletonVariables.getInstance();

    view = inflater.inflate(R.layout.login, null);
    EditText userEditText = (EditText) view.findViewById(R.id.loginUserIdEditText);
    getWindow().getDecorView().setSystemUiVisibility(8);
Run Code Online (Sandbox Code Playgroud)

但是这会导致错误:

The method getWindow() is undefined for the type LoginDialog
Run Code Online (Sandbox Code Playgroud)

有谁知道这可以避免的方式?

编辑:(其他请求的源代码)

// Function to handle show dialog
public void showLogin(View view, String whichActivity) {
    pd = new ProgressDialog(this.getApplicationContext());
    pd.setMessage("Logging in, Please wait....");

    LoginDialog logindialog = new LoginDialog();
    logindialog.setWhichActivity(whichActivity);
    logindialog.show(getFragmentManager(), "MyLogin");
}
Run Code Online (Sandbox Code Playgroud)

小智 5

试试这个代码

@Override
public void show() {
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
    super.show();
    int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_FULLSCREEN;
    this.getWindow().getDecorView().setSystemUiVisibility(uiOptions);
    this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);

}
Run Code Online (Sandbox Code Playgroud)


Nex*_*ski 2

也许这可以帮助你? /sf/answers/1640514571/

像这样吗?

View decorView = getActivity().getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
Run Code Online (Sandbox Code Playgroud)

更新:( 来源:https ://stackoverflow.com/a/2844648/3464293 )

在您的 LoginDialog.java 中添加此方法:

@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.requestWindowFeature(Window.FEATURE_NO_TITLE); 
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; 
window.getDecorView().setSystemUiVisibility(uiOptions);
}
Run Code Online (Sandbox Code Playgroud)

然后尝试一下。删除以前的更新。