當前位置:首頁 » 安卓系統 » android開發狀態欄

android開發狀態欄

發布時間: 2023-07-23 08:54:50

⑴ 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編程怎麼動態的隱藏狀態欄

這篇文章主要介紹了 方法一:(經試驗無效,但網上廣為流傳,也許是我使用方法不當,有待進一步驗證……) android想要應用運行時全屏有一種方法是在activity的onCreat方法中加入如下代碼:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);並且需要在setContentView()之前,否則無效過。從這么多的苛刻條件可以看出這種方法無法滿足動態控制。 下面的方法可以滿足這個需要。調用View的 setSystemUiVisibility() 方法,其參數如下: 代碼如下: View.SYSTEM_UI_FLAG_FULLSCREEN, //全屏,狀態欄和導航欄不顯示 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION, //隱藏導航欄 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN, //全屏,狀態欄會蓋在布局上 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION, View.SYSTEM_UI_FLAG_LAYOUT_STABLE, View.SYSTEM_UI_FLAG_LOW_PROFILE, View.SYSTEM_UI_FLAG_VISIBLE, //顯示狀態欄和導航欄 View.SYSTEM_UI_LAYOUT_FLAGS 方法二:(試驗成功) 直接調用此方法即可實現對狀態欄的控制; 代碼如下: private void full(boolean enable) { if (enable) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setAttributes(lp); getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } else { WindowManager.LayoutParams attr = getWindow().getAttributes(); attr.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setAttributes(attr); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } }

⑶ Android設置狀態欄顏色和狀態欄文字、圖標顏色

Android開發中,經常需要實現下圖狀態欄的效果,類似於沉浸式狀態欄,但這里僅僅是討論設置狀態欄的顏色和狀態欄上面文字、圖標的顏色的方法。

Android 4.4(API 19)之後,就提供了修改狀態欄顏色的方法,但是在 Android 6.0(API 23)之後,才支持修改狀態欄上面的文字和圖標顏色,默認是白色的。所以會導致一個問題,在 4.4 到 6.0 之間的系統,狀態欄設置為淺色的話,狀態欄上面白色的文字和圖標會看不清,像下面這樣:

有一些第三方的系統提供了設置狀態欄和狀態欄文字、圖標顏色的方法,比如小米的MIUI和魅族的Flyme,所以考慮了下比較好的實現方式是:

當然,這裡面也會有坑,比如 MIUI 提供的修改狀態欄字體顏色方法會跟 Android 系統自帶的方法沖突,官方說明如下: 關於MIUI狀態欄字元顏色邏輯調整說明
經過網上的資料和自己的嘗試,MIUI 系統還是同時使用 MIUI 提供的方法和 Android 系統自帶的方法來修改狀態欄字體顏色比較保險。

基於上面的思考,封裝了設置 Android 4.4 以上系統狀態欄顏色和狀態欄字體、圖標顏色的方法:

要在 Application Theme 加上 <item name="android:fitsSystemWindows">true</item> ,不然頁面會頂到狀態欄上面,或者在 Activity 的布局裡面加上 android:fitsSystemWindows="true" 和 android:clipToPadding="false" 也可以。

最終實現的效果如下:

大家有更好的方案可以告訴我~

⑷ android開發如何改變狀態欄顏色

參考下面代碼:

狀態欄將顯示為純凈的顏色,沒有漸變效果
/**
* 狀態欄相關工具類
*
*/
public class StatusBarUtils {

public static void setWindowStatusBarColor(Activity activity, int colorResId) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(activity.getResources().getColor(colorResId));

//底部導航欄
//window.setNavigationBarColor(activity.getResources().getColor(colorResId));
}
} catch (Exception e) {
e.printStackTrace();
}
}

public static void setWindowStatusBarColor(Dialog dialog, int colorResId) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = dialog.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(dialog.getContext().getResources().getColor(colorResId));

//底部導航欄
//window.setNavigationBarColor(activity.getResources().getColor(colorResId));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

⑸ 安卓狀態欄高度是多少

問題一:App 安卓720*1280的狀態欄、導航欄、主菜單高度分別是50、96、96,那麼1080x1920的呢? 720*1280的密度與1080*1920的密度比 乘以高度就好了

問題二:如何修改手機狀態欄大物顫渣小和高度 反編譯framework-res.apk
2.打開res/values/dimens.xml文件
3.修改如下代碼:
25.0dip
25.0dip
4.第一個是狀態欄的高度,25.0dip是我們現在看到的高度
5.第二罩悄個是圖標的高度
6.回編譯,替換resources.arsc到原來的apk里
framework-res.apk文件位於/system/framework文件夾

問題三:android 狀態欄高度是多少 可以通過以下方法獲取:
public static int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier(
status_bar_height, dimen, android);
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}

問題四:android 狀態欄高度是多少 可通過下面調用系統方法獲取精確的高度:
int resourceId = getResources().getIdentifier(status_bar_height, dimen, android);
獲取狀態欄高度
int statusBarHeight = getResources().getDimensionPixelSize(resourceId);

問題五:android狀態欄是多少dp 可以獲取到的。
Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;

具體大小我好像記得是20dp.不太記得了

問題六:android狀態欄高度是多少 一般我覺得45dp就可以了

問題七:android中怎麼計算標題欄高度 getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);/取得整個視圖部分,注意,如果你要設置標題樣式,這個必須出現在洞裂標題樣式之後,否則會出錯
int top = rect.top;狀態欄的高度,所以rect.height,rect.width分別是系統的高度的寬度
View v = getWindow().findViewById(Window.ID_ANDROID_CONTENT);/獲得根視圖
int top2 = v.getTop();/狀態欄標題欄的總高度,所以標題欄的高度為top2-top
int width = v.getWidth();/視圖的寬度,這個寬度好像總是最大的那個
int height = v.getHeight();視圖的高度,不包括狀態欄和標題欄
如果只想取得屏幕大小,可以用
Display display = getWindowManager().getDefaultDisplay() ;
display.getWidth();
display.getHeight();代碼見@Overridepublic void onWindowFocusChanged(boolean hasFocus) {
TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
狀態欄高度
int statusBarHeight = frame.top;
View v = getWindow().findViewById(Window.ID_ANDROID_CONTENT);
int contentTop = v.getTop();
statusBarHeight是上面所求的狀態欄的高度
int titleBarHeight = contentTop - statusBarHeight;
textView = (TextView) findViewById(R.id.textView1);
textView.setText(標題欄的高度 + Integer.toString(titleBarHeight) +
+ 標題欄高度 + statusBarHeight +
+ 視圖的寬度 + v.getWidth()
+
+ 視圖的高度(不包含狀態欄和標題欄) + v.getHeight());

問題八:安卓480x800狀態欄和導航欄高度是多少 分別是12,48 dp @android/style裡面有寫的

問題九:如何修改 Android 狀態欄高度 反編譯framework-res.apk2.打開res/values/dimens.xml文件3.修改如下代碼:25.0dip25.0dip4.第一個是狀態欄的高度,25.0dip是我們現在看到的高度5.第二個是圖標的高度6.回編譯,替換resources.arsc到原來的apk里
framework-res.apk文件位於/system/framework文件夾中

問題十:android 狀態欄高度多少25dp 可以通過以下方法獲取:
public static int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier(
status_bar_height, dimen, android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}

⑹ android導航欄與狀態欄顏色及透明度

首先創建一個空項目,如下圖

可以看到狀態欄是白字黑背景, 導航欄也是白圖標黑背景
嘿嘿, 我們先把狀態欄隱藏掉,在添加一個ImageView, 讓ImageView做背景(方便查看)

樣子如下:

將狀態欄和導航欄設置透明, 找到 Manifest.xml 文件, 在主題樣式中修改

android:statusBarColor 設置狀態欄背景色
android:navigationBarColor 同上
android:windowLightStatusBar 設置狀態欄文字色, true為深色, false為白色
android:windowLightNavigationBar 同上
android:windowTranslucentStatus 設置狀態欄半透明狀態, true為半透明, false為不透明
android:windowTranslucentNavigation 同上

最後兩個半透明狀態下面沒用, 可自己嘗試看效果

效果圖如下:

可以看到導航欄與狀態欄並沒有透明,原因是默認不能佔用狀態欄空間與導航欄空間,根布局背景為白色,所有這里顯示白色
可以通過設置 getWindow().getDecorView().setSystemUiVisibility() 來適配

View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 適配狀態欄空間
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 適配導航欄空間
效果如下:

熱點內容
sql語句on 發布:2025-02-05 07:41:42 瀏覽:596
取消電腦密碼怎麼設置8 發布:2025-02-05 07:24:16 瀏覽:393
洗腦編程 發布:2025-02-05 07:23:52 瀏覽:948
osd加密 發布:2025-02-05 07:17:39 瀏覽:36
微信游戲源碼下載 發布:2025-02-05 07:17:29 瀏覽:384
計算機內存儲器是 發布:2025-02-05 07:13:35 瀏覽:144
classpathlinux 發布:2025-02-05 07:12:57 瀏覽:564
linuxftp連接失敗 發布:2025-02-05 07:01:40 瀏覽:705
學生信息管理系統java 發布:2025-02-05 06:58:45 瀏覽:576
刺客信條4解壓後 發布:2025-02-05 06:55:23 瀏覽:901