只有一项活动的Android全屏?

时间:2018-01-06 04:24:46

标签: java android

我的应用有3项活动(activity_main,activity_one,activity_two)。 我想全屏只播放第一个活动,所以我搜索了一下,然后发现我必须使用它:

 View decorView = getWindow().getDecorView();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}

当我进入其他不全屏的活动并按下后退按钮并返回主活动时,主页按钮后退按钮隐藏了我的主要活动的底部。我该如何解决这个问题? 如果可能的话,我想知道如何让我的活动全屏,但保留操作栏。 编辑: 我要求一个活动的全屏而不是其他两个活动(除非动作栏保持不变)。如果我继续activity_two(这不是全屏)我有主页按钮后退按钮等。如果我按下后退按钮并回到主要活动按钮停留在那里,我不想(不仅因为我想要我的主要全屏,而是因为活动二的按钮停留并隐藏我的主要活动的底部)

2 个答案:

答案 0 :(得分:1)

你可以用两种方式做到这一点,

以编程方式 - 将FullScreen标志设置为onCreate()方法内的活动窗口(在setContentView()之后或之前)。你想要全屏谁。例如,

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        Window w = getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                      WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

或者您可以在theme中设置AndroidManifest.xml

<activity 
         android:name=".YourActivityName"
         android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

或者如果您使用AppCompatActivity,则可以设置为,

<activity 
        android:name=".YourActivityName"
        android:theme="@android:style/Theme.AppCompat.Light.NoActionBar"/> 

有关窗口标记的详细信息,请查看此链接https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html

答案 1 :(得分:0)

因为onWindowsFocusChanged()是你需要的,所以试试这个:

1。首先,在MainActivity中将此变量声明为全局。

private int currentApiVersion;

2.然后将此代码粘贴到该活动的onCreate()中。

currentApiVersion = Build.VERSION.SDK_INT;
final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
if (currentApiVersion >= Build.VERSION_CODES.KITKAT) {
    getWindow().getDecorView().setSystemUiVisibility(flags);
    final View decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
          @Override
          public void onSystemUiVisibilityChange(int visibility) {
              if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                   decorView.setSystemUiVisibility(flags);
              }
          }
    });
}

3。现在将此方法粘贴到MainActivity类中。

@SuppressLint("NewApi")
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (currentApiVersion >= Build.VERSION_CODES.KITKAT && hasFocus) {
        getWindow().getDecorView().setSystemUiVisibility(
               View.SYSTEM_UI_FLAG_LAYOUT_STABLE
             | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
             | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
             | View.SYSTEM_UI_FLAG_FULLSCREEN
             | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
             | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
 }

现在这应该有效,试一试。