1. 程式人生 > >Android之APP的全屏實現

Android之APP的全屏實現

在我們手機的介面上,有許多元素。先來看一張圖。
這裡寫圖片描述
有時我們需要全屏,將這些元素都隱藏掉,實現全屏效果。
首先來看一個佈局檔案,在這兒我們將屬性都設定成match_parent

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height
="match_parent" tools:context="com.example.test.MainActivity">
<ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/www"/> </RelativeLayout>

執行程式,來看一下效果:
這裡寫圖片描述
這張圖片中,所有的元素都在。
然後我們先去掉actionBar
在mainActivity中新增程式碼:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();
    }
}

這裡寫圖片描述
如此就隱藏掉了actionBar,我們也可以設定activity的主題,在AndroidManifest中對activity如此設定:

android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"

現在我們想隱藏掉狀態列,在Activity中加入以下程式碼:

        View decorView = getWindow().getDecorView();
        int option = View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(option);

這裡寫圖片描述

如此,我們就隱藏掉了狀態列,但是我們若想看見狀態列,讓他是透明的那種。這也可以,不過只有5.0支援,在activity中新增以下程式碼即可。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();
    }
}

在這需要判斷sdk版本,接下來我們使用了SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN和SYSTEM_UI_FLAG_LAYOUT_STABLE,注意兩個Flag必須要結合在一起使用,表示會讓應用的主體內容佔用系統狀態列的空間,最後再呼叫Window的setStatusBarColor()方法將狀態列設定成透明色就可以了。
這裡寫圖片描述
這樣我們的狀態列就是可見的,而我們的內容也差不多是佔全屏的。下面就讓我們來解決底部導航欄,(在有些手機上是沒有的)
來看程式碼:

package com.example.test;

import android.graphics.Color;
import android.os.Build;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View decorView = getWindow().getDecorView();
        int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(option);
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();
    }
}

這裡我們同時使用了SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN,這樣就可以將狀態列和導航欄同時隱藏了。

這裡寫圖片描述

若我們需要背景透明的導航欄,我們可以模仿著做:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= 21) {
    View decorView = getWindow().getDecorView();
    int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    decorView.setSystemUiVisibility(option);
    getWindow().setNavigationBarColor(Color.TRANSPARENT);
    getWindow().setStatusBarColor(Color.TRANSPARENT);
}
ActionBar actionBar = getSupportActionBar();
actionBar.hide();

這裡寫圖片描述

還有一點問題,在前面全屏中,我們點選螢幕的任何位置都會使狀態列顯示出來,並且不會隱藏。
我們若需要打遊戲時的那種全屏方式,我們需要新增如下程式碼:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus && Build.VERSION.SDK_INT >= 19) {
            View decorView = getWindow().getDecorView();
            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);
        }
    }

}

在這隻有Android4.4才支援,所以得加判斷。這樣就實現了遊戲式的全屏。
這裡寫圖片描述

本片文章參考自郭大哥