修改狀態列與導航欄顏色
1.修改狀態列
可進行自定義
public class StatusBarView extends View { private Context context; public StatusBarView(Context context) { this(context,null); } public StatusBarView(Context context, AttributeSet attrs) { super(context, attrs); this.context=context; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(ScreenUtils.getStatusBarHeight(context), MeasureSpec.EXACTLY)); } }
<com.cy.translucentparent.StatusBarView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#33000000" />
2.工具類
a.解析度轉換工具類
public class ScreenUtils { //獲得狀態列高度 public static int getStatusBarHeight(Context context) { Resources resources = context.getResources(); int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android"); return resources.getDimensionPixelSize(resourceId); } //獲得導航欄高度 public static int getNavigationBarHeight(Context context) { Resources resources = context.getResources(); int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); return resources.getDimensionPixelSize(resourceId); } //獲得螢幕寬度 public static int getScreenWidth(Context context) { DisplayMetrics displayMetrics = new DisplayMetrics(); WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.widthPixels; } //獲得螢幕高度 public static int getScreenHeight(Context context) { DisplayMetrics displayMetrics = new DisplayMetrics(); WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.heightPixels; } /** * 將px值轉換為dip或dp值,保證尺寸大小不變 * * @param pxValue * @param scale (DisplayMetrics類中屬性density) * @return */ public static int px2dp(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * 將dip或dp值轉換為px值,保證尺寸大小不變 * * @param dipValue * @param scale (DisplayMetrics類中屬性density) * @return */ public static int dpInt2px(Context context, int dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } public static int dp2px(Context context, int dimen_resID) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (context.getResources().getDimension(dimen_resID) * scale + 0.5f); } /** * 將px值轉換為sp值,保證文字大小不變 * * @param pxValue * @param fontScale (DisplayMetrics類中屬性scaledDensity) * @return */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * 將sp值轉換為px值,保證文字大小不變 * * @param spValue * @param fontScale (DisplayMetrics類中屬性scaledDensity) * @return */ public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } /** * 計算指定的 View 在螢幕中的座標。 */ public static RectF calcViewScreenLocation(View view) { int[] location = new int[2]; // 獲取控制元件在螢幕中的位置,返回的陣列分別為控制元件左頂點的 x、y 的值 view.getLocationOnScreen(location); return new RectF(location[0], location[1], location[0] + view.getWidth(), location[1] + view.getHeight()); } /** * 判斷觸控點是否在控制元件內 */ public static boolean isInViewRange(View view, MotionEvent event) { // MotionEvent event; // event.getX(); 獲取相對於控制元件自身左上角的 x 座標值 // event.getY(); 獲取相對於控制元件自身左上角的 y 座標值 float x = event.getRawX(); // 獲取相對於螢幕左上角的 x 座標值 float y = event.getRawY(); // 獲取相對於螢幕左上角的 y 座標值 // View view; RectF rect = calcViewScreenLocation(view); return rect.contains(x, y); } }
b.修改狀態列顏色與導航欄顏色的工具類
public class StatusNavUtils { /** * 狀態列透明去陰影(5.0以上) * * @param activity * @param color */ public static void setStatusBarColor(Activity activity, int color) { Window window = activity.getWindow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(color); return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } } /** * 導航欄全透明去陰影(5.0以上) * * @param activity * @param color */ public static void setNavigationBarColor(Activity activity, int color) { Window window = activity.getWindow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setNavigationBarColor(color); return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } } /** * 狀態列、導航欄全透明去陰影(5.0以上) * * @param activity * @param color_status * @param color_nav */ public static void setStatusNavBarColor(Activity activity, int color_status, int color_nav) { Window window = activity.getWindow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(color_status); window.setNavigationBarColor(color_nav); return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } } }
c:用法
StatusNavUtils.setStatusBarColor(this,0x00000000);
StatusNavUtils.setNavigationBarColor(this,0x33000000);
相關文章
- 直播軟體搭建,修改狀態列、導航條顏色及文字顏色
- android 自定義狀態列和導航欄分析與實現Android
- Flutter改變狀態列字型、狀態列背景顏色、Appbar背景顏色的方式FlutterAPP
- 線上直播原始碼,單獨修改狀態列顏色原始碼
- Android 顯示、隱藏狀態列和導航欄Android
- 直播app原始碼,狀態列和導航欄設定成透明狀態APP原始碼
- flutter佈局-9-appbar導航欄和狀態列FlutterAPP
- 簡易的iOS導航欄顏色漸變方案iOS
- 關於iOS 狀態列、導航欄的幾處筆記iOS筆記
- flutter全屏沉浸式狀態列+標題欄|flutter凸起Tabbar導航FluttertabBar
- Android的標題欄,狀態列圖示文字顏色及背景動態變化Android
- Android 7.0 SystemUI 之啟動和狀態列和導航欄簡介AndroidSystemUI
- 解決使用BottomSheetDialog底部虛擬導航欄NavigationBar的顏色Navigation
- win10 工作列顏色修改方法 win10工作列怎麼修改顏色Win10
- Android 沉浸式狀態列 漸變顏色的實現Android
- uni-app動態修改頂部導航欄標題APP
- Win10系統怎麼修改桌面工作列顏色?工作列顏色修改步驟教程Win10
- win10 如何修改工作列顏色 win10怎樣修改工作列顏色Win10
- 直播app系統原始碼,Flutter中導航欄和狀態列設定成透明APP原始碼Flutter
- 搭建自己的直播平臺,更改狀態列的字型顏色
- CARDS主題 & 導航欄樣式修改
- 短視訊直播系統,Android狀態列設定顏色字型Android
- [SVG]修改固定顏色為填充顏色SVG
- 點選導航欄使當前欄目背景變色
- 技術乾貨 | jsAPI 方式下的導航欄的動態化修改JSAPI
- 直播系統開發,實現自適應手機狀態列高度的頂部導航欄
- win10工作列顏色改不了怎麼辦 修改工作列顏色的方法一覽Win10
- 修改Android 介面顏色Android
- 短視訊平臺開發,畫面靜置時隱藏狀態列、導航欄、進度條
- win10如何修改工作列顏色_win10下面工作列怎麼改顏色Win10
- 滑鼠懸浮導航欄背景和字型變色效果
- 更改NavMenu 導航選單啟用時的背景顏色
- 直播系統搭建,設定透明背景(去掉蒙層)狀態列顏色不改變
- win10 開始欄怎麼換顏色_windows10工作列顏色怎麼改Win10Windows
- ffmpeg修改顏色空間
- 短視訊系統,android Switch修改顏色修改樣式滑塊顏色Android
- dell win10怎麼修改工作列顏色_dell電腦win10底部工作列如何換顏色Win10
- vue - elementui 元件 表格 <el-table> 列頭修改背景顏色VueUI元件