導航:首頁 > 操作系統 > Android狀態欄app

Android狀態欄app

發布時間:2022-11-26 03:46:26

① flutter設置android App狀態欄透明以及其它顏色的方法

測試環境:

分別導入如下包:

具體操作如下:

② Android 完全隱藏狀態欄方法

Android 完全隱藏狀態欄方法  https://blog.csdn.net/ljbphoebe/article/details/88179576

1. 隱藏ActionBar:

ActionBar actionBar = getActionBar();

if (actionBar != null) {

    actionBar.hide();

}

如果是繼承AppCompatActivity,就用getSupportActionBar()。

2. 隱藏狀態欄

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

通過這兩個步就可以全屏顯示啟動頁了。

然而,當開始動態申請許可權,彈出系統的許可權提示對話框後,狀態欄又重新露出來了。我日,不是隱藏了嗎?怎麼又出來了,什麼鬼?

通過查看源碼的解釋:

/**

* Request that the visibility of the status bar or other screen/window

* decorations be changed.

*

* <p>This method is used to put the over device UI into temporary modes

* where the user's attention is focused more on the application content,

* by dimming or hiding surrounding system affordances.  This is typically

* used in conjunction with {@link Window#FEATURE_ACTION_BAR_OVERLAY

* Window.FEATURE_ACTION_BAR_OVERLAY}, allowing the applications content

* to be placed behind the action bar (and with these flags other system

* affordances) so that smooth transitions between hiding and showing them

* can be done.

*

* <p>Two representative examples of the use of system UI visibility is

* implementing a content browsing application (like a magazine reader)

* and a video playing application.

*

* <p>The first code shows a typical implementation of a View in a content

* browsing application.  In this implementation, the application goes

* into a content-oriented mode by hiding the status bar and action bar,

* and putting the navigation elements into lights out mode.  The user can

* then interact with content while in this mode.  Such an application should

* provide an easy way for the user to toggle out of the mode (such as to

* check information in the status bar or access notifications).  In the

* implementation here, this is done simply by tapping on the content.

*

* {@sample development/samples/ApiDemos/src/com/example/android/apis/view/ContentBrowserActivity.java

*      content}

*

* <p>This second code sample shows a typical implementation of a View

* in a video playing application.  In this situation, while the video is

* playing the application would like to go into a complete full-screen mode,

* to use as much of the display as possible for the video.  When in this state

* the user can not interact with the application; the system intercepts

* touching on the screen to pop the UI out of full screen mode.  See

* {@link #fitSystemWindows(Rect)} for a sample layout that goes with this code.

*

* {@sample development/samples/ApiDemos/src/com/example/android/apis/view/VideoPlayerActivity.java

*      content}

*

* @param visibility  Bitwise-or of flags {@link #SYSTEM_UI_FLAG_LOW_PROFILE},

* {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}, {@link #SYSTEM_UI_FLAG_FULLSCREEN},

* {@link #SYSTEM_UI_FLAG_LAYOUT_STABLE}, {@link #SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION},

* {@link #SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}, {@link #SYSTEM_UI_FLAG_IMMERSIVE},

* and {@link #SYSTEM_UI_FLAG_IMMERSIVE_STICKY}.

*/

從釋義上可以知道,setSystemUiVisibility()是用於使系統UI進入一種臨時的模式,目的是使用戶的注意力關注於應用程序的內容上。所以單獨一個Activity這樣設置是可以全屏顯示的,這個只對當前的Activity有效。可是當申請系統許可權使,彈出的對話框是系統的Activity,通過adb shell mpsys activity 來看,當前最頂端的Activity已經是GrantPermissionsActivity。

Run #2: ActivityRecord{2b99111 u0 com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity t141}

而這個GrantPermissionsActivity,我們並無法去設置它的setSystemUiVisibility()。所以這種方法不奏效。

通過和同事討論,後來找到一種方法,可以實現我們的需求。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

這種方法是OK的。

它的源碼釋義是:

/**

* Set the flags of the window, as per the

* {@link WindowManager.LayoutParams WindowManager.LayoutParams}

* flags.

*

* <p>Note that some flags must be set before the window decoration is

* created (by the first call to

* {@link #setContentView(View, android.view.ViewGroup.LayoutParams)} or

* {@link #getDecorView()}:

* {@link WindowManager.LayoutParams#FLAG_LAYOUT_IN_SCREEN} and

* {@link WindowManager.LayoutParams#FLAG_LAYOUT_INSET_DECOR}.  These

* will be set for you based on the {@link android.R.attr#windowIsFloating}

* attribute.

*

* @param flags The new window flags (see WindowManager.LayoutParams).

* @param mask Which of the window flag bits to modify.

* @see #addFlags

* @see #clearFlags

*/

public void setFlags(int flags, int mask) {}

仔細分析發現,這個是設置整個當前Window的,而setSystemUiVisibility()聚焦於顯示Activity內容的,還是有差別的。

/**

* Window flag: hide all screen decorations (such as the status bar) while

* this window is displayed.  This allows the window to use the entire

* display space for itself -- the status bar will be hidden when

* an app window with this flag set is on the top layer. A fullscreen window

* will ignore a value of {@link #SOFT_INPUT_ADJUST_RESIZE} for the window's

* {@link #softInputMode} field; the window will stay fullscreen

* and will not resize.

*

* <p>This flag can be controlled in your theme through the

* {@link android.R.attr#windowFullscreen} attribute; this attribute

* is automatically set for you in the standard fullscreen themes

* such as {@link android.R.style#Theme_NoTitleBar_Fullscreen},

* {@link android.R.style#Theme_Black_NoTitleBar_Fullscreen},

* {@link android.R.style#Theme_Light_NoTitleBar_Fullscreen},

* {@link android.R.style#Theme_Holo_NoActionBar_Fullscreen},

* {@link android.R.style#Theme_Holo_Light_NoActionBar_Fullscreen},

* {@link android.R.style#Theme_DeviceDefault_NoActionBar_Fullscreen}, and

* {@link android.R.style#Theme_DeviceDefault_Light_NoActionBar_Fullscreen}.</p>

*/

public static final int FLAG_FULLSCREEN      = 0x00000400;

從釋義上得知,設置這個flag可以隱藏所有的屏幕修飾,像status bar,用於Window使用整個顯示屏。這個完全是我們的目的了。

③ android 狀態欄接收通知,然後點擊通知進入app,這個機制是怎麼做到

1.添加軟體部分推送程序(模塊)到系統服務
2.推送模塊常駐系統後台,只能把整個應用完全停止才會沒有,這也是有的安卓機很卡的原因,應用裡面自己寫,也可以通過其他軟體鏈式喚醒
3.平台統一推送服務,好比小米ov那個啥
4.點擊進入的那個應用,多數是廠商作了專門適配的,進入特定頁面,但這個也是可以通過代碼實現的

④ 為什麼android的app狀態欄不是50px

安卓手機不能按照px來計算,安卓中的單位是pd,指的是手機的密度,pd大概是手機尺寸/手機解析度,有些手機解析度低但屏幕尺寸大,比如紅米note。有些手機解析度高但屏幕尺寸小,比如三星s7/s8,沒准紅米狀態欄50px,到三星s7上就要高達80-120,所以不固定,不過安卓中有方法可以獲取到狀態欄高度。

⑤ android簡書app狀態欄文字顏色是怎麼改的

1.app默認的桌面名字是工程名,需要更改的話,在Bundle dispaly name 上更改就行了
2.有時候導航條顏色比較深,我們希望狀態欄顯示的顏色能夠變得比較淺的時候就需要更改狀態欄顏色了,那麼修改的方法就是在在Info.plist中設置為NO,同時在響應頁面的代碼中需要添加如下的方法:在需要改變狀態欄顏色的ViewController中ViewDidLoad方法中增加:[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];如果需要在全部View中都變色,可以寫在父類的相關方法中。

⑥ Android 狀態欄透明

前言:最近項目大量用到狀態欄透明,網上也出現很多庫可以直接拿來用,個人認為沒有必要那麼重引用到一個庫(有木有同學和我有一樣的想法),所以研究了一番,在此做個記錄加強記憶也便後期查閱,如果無意中有幸能幫助到你那就再好不過了。

Android 從 4.4 (SDK 19) 開始支持 系統欄(狀態欄+導航欄)半透明 效果:

翻譯一下就是:

TranslucentDecor 主題設置了兩個屬性 windowTranslucentStatus 和 windowTranslucentNavigation 都為 true,前者指定狀態欄半透明、後者指定導航欄半透明。

本文只探討「狀態欄」

默認樣式是這樣:

可見 Toolbar 和系統狀態欄之間有明顯的分界,我們要實現的效果是 Toolbar 和狀態欄背景統一,看起來像是一個整體(自行腦補圖片)。

按照官方文檔,我們自定義主題:

對應的 Activity 引用該主題:

我看來看看效果:

雖然實現了半透明,但是布局被狀態欄覆蓋,接下來在布局文件中設置 fitSystemWindows (注意加到根節點 ConstraintLayout 上):

來看看效果:

雖然布局沒有被狀態欄覆蓋,但是狀態欄背景顯然這不是我們想要的效果😭

為什麼狀態欄會這么奇怪?

文章開頭的定義中我們說了,布局文件會延伸到狀態欄所佔區域下, fitsSystemWindows 的作用是給對應的 View 增加 padding(這里以 ConstraintLayout 為例),目的是為了讓其內容不被狀態欄遮擋。

在我們的布局文件中 ConstraintLayout 沒有設置背景(默認白色),所以狀態欄默認的半透明背景色和 ConstraintLayout 的白色背景疊加,就變成了上圖中的效果。

【總結】兩個基本概念:

1、 windowTranslucentStatus 設置為true之後,狀態欄默認是 半透明 的(4.4 是黑色到透明色漸變,5.0+ 是純黑色半透明),和我們要求的 透明 相去甚遠。更重要的是,布局會延伸到狀態欄底下。

2、 android:fitsSystemWindows 簡單理解 就是 View 為了適配系統狀態欄和導航欄(不被遮擋)自動 增加 padding ,當然真正的實現原理比這復雜很多而且不同的 View 可以自定義實現方式。

所以,為了實現文章開頭提出來的「狀態欄透明」效果,我們需要處理:

設置 windowTranslucentStatus 為 true,讓狀態欄半透明。

在根節點設置 android:fitsSystemWindows 使其不被狀態欄遮擋。

Android 4.4 暫時沒有辦法去掉狀態欄的漸變。

Android 5.0+ 開始支持修改狀態欄顏色,設置透明色即可把半透明去掉。

看看效果:

我們看到即使狀態欄透明了,但是其底色是一片白,因為跟節點 ConstraintLayout 沒有設置背景,大多情況下我們不會給整個跟節點設置顏色,可以考慮把 android:fitsSystemWindows 設置到子 View 上,本例中是 AppBarLayout (5.0+ 無效,只能顯式給 AppBarLayout 加 padding,可以利用其背景色),實際項目中可靈活調整。

最終效果:

至此,完成狀態欄透明效果,網上有很多庫,實際上都是基於此原理,在此基礎上再自定義 View 做為狀態欄背景。

https://developer.android.com/about/versions/android-4.4.html

⑦ 有沒有一款輕量級的,只顯示在安卓狀態欄的網速實時顯示的app。

通知欄顯示網速 安卓版
平時上網有時發現很慢,想知道網速多少,現在介紹一款軟體能夠實時查看網速的工具[通知欄顯示網速].現在4G網路來臨,就是速度時代,查看實時網速到地有沒有給人坑了,特別下載東西時,能不能保持高速下載,每秒速度是多少,用上了就清清楚楚.能夠讓用戶們隨時隨地了解自己的網路情況應用.特點1.支持所有網路和Wifi網路2.支持多種模式顯示.3.支持開機啟動服務監測.4.佔用資源少,真正為用戶節省內存與CPU.5.支持文字大小,顏色設置.6.支持自定義懸浮窗背景.無網路時隱藏7.支持拖動模式,喜歡放那裡就那裡.

⑧ Android 狀態欄的設置

先看一下默認的情況:

藍色一行是自定義的導航欄,
黑色的是自帶的 ActionBar ,也就是我們說的標題欄。

首先一般都會選擇去掉 ActionBar:

隱藏 actionbar 有很多種方法

這種方法是全局中隱藏了標題欄。

其實在我的手機更新系統之前,隱藏了 ActionBar 後,狀態欄和自定義的導航欄顏色是相匹配的,不知道什麼原因現在默認為灰色了。

上面使用的主題雖然隱藏了標題欄,但是和我們自定義的導航欄不搭,
這時候我們可以選擇用自定義的主題(Theme),來改變狀態欄:

在 values 下的 style.xml 中添加

或者在 onCreate 中:

上面兩行一般不一起設置,二選一即可。
第一行設置導航欄為透明,第二行將導航欄隱藏。
不推薦第二種做法,如果一個 Activity 中設置了隱藏導航欄而另一個 Activity 沒有,那兩者切換的時候會不好看。

融合的效果:

狀態欄和 app 頂部相融合了,如果標題欄是一張圖片效果會更好。
這里還有一個問題,狀態欄的文字和我們導航欄的文字重疊了,
我們可以選擇在布局文件的根元素中添加:

讓布局為狀態欄留出空間,就不會出現上面這張被狀態欄遮擋的情況。

如果像上面的例子是一樣的純色的標題欄,我們可以選擇直接改變狀態欄的顏色解決問題。

或者:

不顯示時間、電量等信息和文字:

同要可以用修改 Theme 來實現:

或者在 OnCreat() 中加入,還是要注意加在 setContentView() 的前面

如果想讓圖片全屏要注意設置為:

⑨ Android 將App的內容延伸到狀態欄/導航欄

來自我的CSDN博客: http://blog.csdn.net/dahaohan/article/details/52175190

看過Android的桌面應用都是介樣的:

如何讓自己的應用也達到這般效果呢?這里就介紹幾種常用的方法以及它們之間的區別。

首先展示下此次demo的布局和初始狀態:

初始效果圖如下:

使用這個方式首先要理解幾個概念,窗口層級以及窗口background/窗口透明:
Google在API-19 以及API-21新增對狀態欄/導航欄窗口透明和顏色的控制:

對應的在主題內即可控制:

這里首先要明了這里狀態欄和導航欄窗口是系統級窗口而Activity對應的時應用窗口,它們屬於不同的窗口層級;
然後狀態欄/導航欄系統級窗口是在App應用窗口之上,故而Activity應用窗口雖然有整個屏幕的大小,但是可顯示內容的區域得除去其上疊加的不透明的窗口區域。詳細的窗口計算繪制可參考大神老羅的博文:
Android窗口管理服務WindowManagerService計算Activity窗口大小的過程分析

下面來使用主題控制導航欄/狀態欄透明,同時看看上述兩種設置透明的方式效果有何不同:

初始桌面和啟動Activity效果圖:

可以看到雖然導航欄/狀態欄透明了,當時應用窗口顯示的內容依然只是除去了兩個系統窗口之外的區域,並沒有衍生到導航欄/狀態欄之下。

效果如下:

可以看到已經將應用的內容布局延伸到導航欄/狀態欄下方了,來看看關於android:windowTranslucentStatus
android:windowTranslucentNavigation的官方說明看看來理解其與設置color transparent的區別:

根據FLAG的說明,可以看出設置該標志位等同於View申請設置:

PS:從效果圖看,雖然布局延伸到狀態欄導航欄區域,但是相應的內容「hello world」文字也被狀態欄/導航欄遮住了。在布局根視圖設置fitsSystemWindows為true可以使得,系統自動為視圖添加一個狀態欄/導航欄高度的padding:

效果如下:

查看SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 和 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN的說明,可以發現其實還有兩個非常接近的FLAG:

根據官方的說明提示,SYSTEM_UI_FLAG_FULLSCREEN / SYSTEM_UI_FLAG_HIDE_NAVIGATION主要用於動態切換隱藏/顯示系統導航欄/狀態欄;例如書籍閱讀應用/視頻播放應用等。而像游戲類的全屏應用則推薦使用window flag。

上述的透明導航欄/狀態欄等API基本是需要API-19或是API-21才能使用的,這里還有一種API-1的方案能夠實現布局內容全屏:

實際上只需要設置FLAG_LAYOUT_NO_LIMITS就足夠了;這FLAG是看Android原生的Launcher / Keyguard源碼,看到有用到如此設置,其窗口設置具體原理我也沒有弄清..... 有大神了解可以指點下。

PS:這個套路下,使用fitsSystemWindows="true"是無效的,智能自己控制號布局位置。

閱讀全文

與Android狀態欄app相關的資料

熱點內容
安卓系統游戲怎麼開發 瀏覽:410
抖助力app綁定的銀行卡怎麼辦 瀏覽:466
我的電腦文件夾打開方式 瀏覽:931
東莞加密u盤公司 瀏覽:137
graphvizlinux 瀏覽:438
智能手錶藍牙怎麼下載app 瀏覽:293
女程序員下班菜譜 瀏覽:260
加密貨幣買什麼比較靠譜 瀏覽:277
用圖片的地圖再編譯的地方 瀏覽:462
python監控系統進程 瀏覽:236
群暉怎麼取消照片共享文件夾 瀏覽:156
程序員那麼可愛第幾集陸璃懷孕 瀏覽:615
西門子st編程手冊 瀏覽:59
mt4編程書籍 瀏覽:21
單片機模擬實驗設置電壓 瀏覽:948
如何用電腦打開安卓手機內存 瀏覽:860
java數據訪問層 瀏覽:181
代碼優化是編譯程序的必要階段 瀏覽:623
程序員那麼可愛孩子還在嗎 瀏覽:513
以下哪些是資料庫編程技術 瀏覽:164