2020年4月13日 星期一

[ Android Studio ] 創建軟體給的 FullscreenActivity 介面之說明


一、 setSystemUiVisibility屬性用法如下:

1. SYSTEM_UI_FLAG_LOW_PROFILE:
View已請求系統UI進入低調的“低調”模式。

2. SYSTEM_UI_FLAG_HIDE_NAVIGATION:
已請求暫時隱藏系統導航。



3. SYSTEM_UI_FLAG_FULLSCREEN:
已請求進入正常的全屏模式,以便它的內容可以接管屏幕,同時仍然允許用戶與應用程序進行交互。

4. SYSTEM_UI_FLAG_LAYOUT_STABLE:
使用其他佈局標誌時,我們希望獲得賦予的內容插圖的穩定視圖

5. SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:
請求狀態欄以與燈光狀態欄背景兼容的模式繪製。
View希望將其窗口佈局為已請求SYSTEM_UI_FLAG_HIDE_NAVIGATION,即使當前未請求 。這樣可以避免在進入和退出該模式時出現偽影,其代價是在顯示某些用戶界面時可能會被屏幕裝飾覆蓋。

6. SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:
View希望將其窗口佈局為已請求SYSTEM_UI_FLAG_FULLSCREEN,即使當前未請求 。這樣可以避免在進入和退出該模式時出現偽影,其代價是在顯示某些用戶界面時可能會被屏幕裝飾覆蓋。

7. SYSTEM_UI_FLAG_IMMERSIVE:
使用隱藏導航欄時,View希望保持交互

8. SYSTEM_UI_FLAG_IMMERSIVE_STICKY:
使用隱藏狀態欄SYSTEM_UI_FLAG_FULLSCREEN和/或隱藏導航欄時,View希望保持交互性SYSTEM_UI_FLAG_HIDE_NAVIGATION。

二、程式範例:
package com.example.fullscreen_activity;

import android.annotation.SuppressLint;

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 android.widget.LinearLayout;
import android.widget.TextView;

public class FullscreenActivity extends AppCompatActivity {

    private static final boolean AUTO_HIDE = true;
    private final Handler mHideHandler = new Handler();
    private TextView mContentView;
    private LinearLayout mControlsView;
    private final Runnable mHidePart2Runnable = new Runnable() {
        @SuppressLint("InlinedApi")
        @Override        public void run() {
            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 final Runnable mShowPart2Runnable = new Runnable() {
        @Override        public void run() {
            ActionBar actionBar = getSupportActionBar();//getSupportActionBar();取得版本的ActionBar作用欄位            if (actionBar != null) {
                actionBar.show();
            }
            mControlsView.setVisibility(View.VISIBLE);//設置可見性:VISIBLE 可見        }
    };
    private boolean mVisible;
    private final Runnable mHideRunnable = new Runnable() {
        @Override        public void run() {
            hide();
        }
    };

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

        mVisible = true;
        mControlsView =(LinearLayout) findViewById(R.id.fullscreen_content_controls);
        mContentView =(TextView) findViewById(R.id.fullscreen_content);
        mContentView.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View view) {
                toggle();
            }
        });

        findViewById(R.id.dummy_button).setOnTouchListener(new View.OnTouchListener() {
            @Override            public boolean onTouch(View v, MotionEvent event) {
                    //onTouch觸摸行為                delayedHide(200);//延遲隱藏秒為200                return false;
            }
        });
    }
  //創鍵後執行動作    @Override    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        //開啟執行完成後執行以下內容:        delayedHide(100);
    }

    private void toggle() {
        if (mVisible) {
            hide();
        } else {
            show();
        }
    }

    private void hide() {
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }

        //visible:顯示        //invisible:隱藏,但畫面會保留該物件的位置        //gone:隱藏,不會保留位置        mControlsView.setVisibility(View.GONE);
        mVisible = false;

        mHideHandler.removeCallbacks(mShowPart2Runnable);//移除消息        mHideHandler.postDelayed(mHidePart2Runnable, 200);//製造延遲後執行    }

    @SuppressLint("InlinedApi")
    private void show() {
        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
        mVisible = true;

        mHideHandler.removeCallbacks(mHidePart2Runnable);//移除消息        mHideHandler.postDelayed(mShowPart2Runnable,200);//製造延遲後執行    }

    private void delayedHide(int delayMillis) {

        mHideHandler.removeCallbacks(mHideRunnable);//移除消息        mHideHandler.postDelayed(mHideRunnable, delayMillis);//製造延遲後執行    }
}

沒有留言:

張貼留言

影片的問題請留在影片的留言區裡。
部落格不會另外通知給我,所以很難發現你有留言。