android - 最小化全屏Android应用程序后状态栏重新出现
问题描述
我正在开发一个非常简单的全屏 Android 应用:启动时会呈现一张图片;没有按钮,没有动作。我的顶部状态栏有问题,如下面的模拟器图像所示:
1)当我启动应用程序时,一切都很好,我希望它保持这种状态。
2)单击方形按钮以最小化应用程序后,我可以查看所有打开的程序,这也很好。
3)一旦我再次点击我的应用程序,它就会最大化,但绿色的顶部栏现在在顶部可见。我希望它看起来像(1)...
下面我粘贴我的 FullscreenActivity.java:
package com.example.myapp;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* An example full-screen activity that shows and hides the system UI (i.e.
* status bar and navigation/system bar) with user interaction.
*/
public class FullscreenActivity extends AppCompatActivity {
/**
* Some older devices needs a small delay between UI widget updates
* and a change of the status and navigation bar.
*/
private static final int UI_ANIMATION_DELAY = 0; //300;
private final Handler mHideHandler = new Handler();
private View mContentView;
private final Runnable mHidePart2Runnable = new Runnable() {
@SuppressLint("InlinedApi")
@Override
public void run() {
// Delayed removal of status and navigation bar
// Note that some of these constants are new as of API 16 (Jelly Bean)
// and API 19 (KitKat). It is safe to use them, as they are inlined
// at compile-time and do nothing on earlier devices.
mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
};
private View mControlsView;
private final Runnable mShowPart2Runnable = new Runnable() {
@Override
public void run() {
// Delayed display of UI elements
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.show();
}
mControlsView.setVisibility(View.VISIBLE);
}
};
private final Runnable mHideRunnable = new Runnable() {
@Override
public void run() {
hide();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bluescreen);
mControlsView = findViewById(R.id.fullscreen_content_controls);
mContentView = findViewById(R.id.fullscreen_content);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
hide();
}
private void hide() {
// Hide UI first
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.hide();
}
mControlsView.setVisibility(View.GONE);
// Schedule a runnable to remove the status and navigation bar after a delay
mHideHandler.removeCallbacks(mShowPart2Runnable);
mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY);
}
}
解决方案
当您的活动进入后台然后将其置于前台时,您设置的标志将被重置。您调用which 仅在创建活动或旋转屏幕时hide()
调用。onPostCreate()
如果您希望hide()
在您的应用程序从后台返回时也调用该方法,onStart()
或者onWindowFocusChanged()
在焦点为真时调用它。
推荐阅读
- django - Djongo 和 Django
- html - 关于简单 Bootstrap 3.4.1 表中缺失列的任何想法?
- javascript - FetchError:无法验证第一个证书,但我添加了rejectUnauthorized:false
- string - Powershell,使用(空格分隔)字符串作为程序的参数
- azure-devops - 如何将多个摘要上传到 Azure DevOps Server 2020 中的发布阶段?
- reactjs - 无法使用 npm install 和依赖项安装 React
- node.js - 尝试在“handleTeamsMessagingExtensionQuery”中获取用户详细信息时,“机器人不是对话名单的一部分”
- r - 参与者的 cumsum 并在 0 R 上重置
- php - PHP:附加到 AWS s3 存储桶
- c - 将 char array[] repersenting hex 值转换为 u64