一、 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);//製造延遲後執行 } }
沒有留言:
張貼留言
影片的問題請留在影片的留言區裡。
部落格不會另外通知給我,所以很難發現你有留言。