Activity全屏和非全屏動態(tài)切換

效果圖

豎屏
橫屏

關(guān)鍵代碼

    private static void enterFullScreen(Activity activity) {
        int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE // 保持View Layout不變籽暇,隱藏狀態(tài)欄或者導(dǎo)航欄后嚣州,View不會拉伸祈纯。
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // 讓View全屏顯示您朽,Layout會被拉伸到StatusBar下面黑界,不包含NavigationBar劳澄。
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // 讓View全屏顯示稍走,Layout會被拉伸到StatusBar和NavigationBar下面袁翁。
                    | View.SYSTEM_UI_FLAG_FULLSCREEN // Activity全屏顯示,且狀態(tài)欄被隱藏覆蓋掉婿脸。等同于(WindowManager.LayoutParams.FLAG_FULLSCREEN)粱胜。
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; // 隱藏虛擬按鍵(導(dǎo)航欄)。有些手機會用虛擬按鍵來代替物理按鍵狐树。
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                // 這個flag只有當設(shè)置了SYSTEM_UI_FLAG_HIDE_NAVIGATION才起作用焙压。如果沒有設(shè)置這個flag,
                // 任意的View相互動作都退出SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果設(shè)置就不會退出涯曲。
                flags |= View.SYSTEM_UI_FLAG_IMMERSIVE
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
            }
        }

        View decorView = activity.getWindow().getDecorView();
        if (decorView != null) {
            decorView.setSystemUiVisibility(flags);
        }
    }

    private static void exitFullScreen(Activity activity) {
        int flags = View.SYSTEM_UI_FLAG_VISIBLE;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE // 保持View Layout不變野哭,隱藏狀態(tài)欄或者導(dǎo)航欄后,View不會拉伸幻件。
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // 讓View全屏顯示拨黔,Layout會被拉伸到StatusBar下面,不包含NavigationBar傲武。
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;// 讓View全屏顯示蓉驹,Layout會被拉伸到StatusBar和NavigationBar下面
        }

        View decorView = activity.getWindow().getDecorView();
        if (decorView != null) {
            decorView.setSystemUiVisibility(flags);
        }
    }

源碼

package com.huawei.fullscreen;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {

    private boolean isFullScreen = false;

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

        final FrameLayout flControlContainer = findViewById(R.id.fl_control_container);
        final Button btnFullScreen = findViewById(R.id.btn_full_screen);
        btnFullScreen.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("SetTextI18n")
            @Override
            public void onClick(View v) {
                if (isFullScreen) {
                    flControlContainer.animate().alpha(1);
                    exitFullScreen(MainActivity.this);
                    btnFullScreen.setText("Enter Fullscreen");
                    isFullScreen = false;
                } else {
                    flControlContainer.animate().alpha(0);
                    enterFullScreen(MainActivity.this);
                    btnFullScreen.setText("Exit Fullscreen");
                    isFullScreen = true;
                }
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        initUiFlags();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        initUiFlags();
    }

    private void initUiFlags() {
        exitFullScreen(this);
    }

    private static void enterFullScreen(Activity activity) {
        int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE // 保持View Layout不變,隱藏狀態(tài)欄或者導(dǎo)航欄后揪利,View不會拉伸态兴。
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // 讓View全屏顯示,Layout會被拉伸到StatusBar下面疟位,不包含NavigationBar瞻润。
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // 讓View全屏顯示,Layout會被拉伸到StatusBar和NavigationBar下面甜刻。
                    | View.SYSTEM_UI_FLAG_FULLSCREEN // Activity全屏顯示绍撞,且狀態(tài)欄被隱藏覆蓋掉。等同于(WindowManager.LayoutParams.FLAG_FULLSCREEN)得院。
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; // 隱藏虛擬按鍵(導(dǎo)航欄)傻铣。有些手機會用虛擬按鍵來代替物理按鍵。
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                // 這個flag只有當設(shè)置了SYSTEM_UI_FLAG_HIDE_NAVIGATION才起作用祥绞。如果沒有設(shè)置這個flag非洲,
                // 任意的View相互動作都退出SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果設(shè)置就不會退出蜕径。
                flags |= View.SYSTEM_UI_FLAG_IMMERSIVE
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
            }
        }

        View decorView = activity.getWindow().getDecorView();
        if (decorView != null) {
            decorView.setSystemUiVisibility(flags);
        }
    }

    private static void exitFullScreen(Activity activity) {
        int flags = View.SYSTEM_UI_FLAG_VISIBLE;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE // 保持View Layout不變两踏,隱藏狀態(tài)欄或者導(dǎo)航欄后,View不會拉伸。
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // 讓View全屏顯示,Layout會被拉伸到StatusBar下面慌随,不包含NavigationBar。
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;// 讓View全屏顯示看蚜,Layout會被拉伸到StatusBar和NavigationBar下面
        }

        View decorView = activity.getWindow().getDecorView();
        if (decorView != null) {
            decorView.setSystemUiVisibility(flags);
        }
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<com.huawei.fullscreen.FitsSystemWindowFrameLayout
    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"
    android:background="@drawable/bg_stroke_white"
    tools:context="com.huawei.fullscreen.MainActivity">

    <FrameLayout
        android:id="@+id/fl_control_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:background="@drawable/bg_stroke_white"
            android:gravity="center"
            android:padding="15dp"
            android:text="Top"
            android:textColor="@android:color/white"
            android:textSize="16sp"
            tools:ignore="HardcodedText"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:background="@drawable/bg_stroke_white"
            android:gravity="center"
            android:padding="15dp"
            android:text="Bottom"
            android:textColor="@android:color/white"
            android:textSize="16sp"
            tools:ignore="HardcodedText"/>
    </FrameLayout>

    <Button
        android:id="@+id/btn_full_screen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Enter Fullscreen"
        tools:ignore="HardcodedText"/>
</com.huawei.fullscreen.FitsSystemWindowFrameLayout>

FitsSystemWindowFrameLayout可以確保布局內(nèi)的控件在全屏切換時不被狀態(tài)欄遮擋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子渡冻,更是在濱河造成了極大的恐慌,老刑警劉巖忧便,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡珠增,警方通過查閱死者的電腦和手機超歌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒂教,“玉大人巍举,你說我怎么就攤上這事∧猓” “怎么了懊悯?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梦皮。 經(jīng)常有香客問我炭分,道長,這世上最難降的妖魔是什么剑肯? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任捧毛,我火速辦了婚禮,結(jié)果婚禮上让网,老公的妹妹穿的比我還像新娘呀忧。我一直安慰自己,他們只是感情好溃睹,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布而账。 她就那樣靜靜地躺著,像睡著了一般因篇。 火紅的嫁衣襯著肌膚如雪泞辐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天惜犀,我揣著相機與錄音铛碑,去河邊找鬼。 笑死虽界,一個胖子當著我的面吹牛汽烦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莉御,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼撇吞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了礁叔?” 一聲冷哼從身側(cè)響起牍颈,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琅关,沒想到半個月后煮岁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年画机,在試婚紗的時候發(fā)現(xiàn)自己被綠了冶伞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡步氏,死狀恐怖响禽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荚醒,我是刑警寧澤芋类,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站界阁,受9級特大地震影響侯繁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铺董,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一巫击、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧精续,春花似錦坝锰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至确垫,卻和暖如春弓颈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背删掀。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工翔冀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人披泪。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓纤子,卻偏偏與公主長得像,于是被迫代替她去往敵國和親款票。 傳聞我的和親對象是個殘疾皇子控硼,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,872評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件艾少、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 計較“得”讓人學會珍惜對方的付出缚够,計較“失”讓人懂得給予的力量幔妨,這才是最理智鹦赎、也最感性的婚姻。 作者:田心陶冷,本文原...
    作者田心閱讀 466評論 0 1
  • 從前不愛钙姊,就像個壞小孩 緊閉的心門打開 那眨眼間的心潮澎湃 總愛做夢,七彩祥云會來 拔出紫青寶劍的天才 就是我命中...
    十年如夢閱讀 281評論 1 3
  • 導(dǎo)讀:關(guān)于編輯人類胚胎基因思恐,英國人并不是第一個“動刀子”的沾谜,中國人早已經(jīng)“手起刀落”了。 試圖編輯人類胚胎基因 2...
    嵐逸筠篁閱讀 209評論 0 2