[英]How to change the icon color selected on bottom navigation bar in android studio
[英]Change navigation bar icon color on Android
我需要更改 android 上的導航欄。就像下圖中右側的“light”變體一樣 如https://www.google.co.in/design/spec/layout/structure.html#structure-system-bars中給出的。
現在,我可以使用更改導航欄的背景
"android:navigationBarColor"
我得到
但似乎無法將按鈕顏色更改為深色。
任何人都知道如何去做。
附言:
在 AOSP 中研究負責導航按鈕的類時,我可以找到NavigationBarView.java 、 PhoneStatusBar.java 、 PhoneWindowManager.java 、 navigation_bar.xml 。
我正在考慮為ic_sysbar_recent
之類的導航欄按鈕獲取可繪制對象的引用並更改它們的色調。 但這些都是私人的,我無法獲得他們的參考。
另外,我看到有人使用 xposed 庫來做L-NAVBAR ,但我不想使用任何外部庫。
如果您使用的是API 27(Android 8.1)或更高版本,則可以在主題中實現此目的:
<item name="android:windowLightNavigationBar">true</item>
您可以創建一個名為values-v27的文件夾,並使用燈光導航欄和上面的代碼放置主題版本(在styles.xml中)以獲取暗導航欄按鈕。
這樣,使用Android 8.0或更低版本的用戶將獲得標准(黑色)導航欄,而使用Android 8.1或更高版本的用戶將獲得帶有暗按鈕的白色導航欄。
從Android O開始,它非常簡單,你可以:
View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
為使此操作生效,窗口必須請求FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,但不能請求FLAG_TRANSLUCENT_NAVIGATION。
文檔: https : //developer.android.com/reference/android/view/View.html#SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
如果您的目標用戶 Api 級別為 27 或更高,只需在您的 AppTheme 中使用此行
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:windowBackground">@color/your_color</item>
</style>
但是,如果您的目標用戶 api 級別低於 27 或更高,您可以使用這些行
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:windowBackground">@color/your_color</item>
<item name="android:windowLightNavigationBar" tools:targetApi="27">true</item>
</style>
通過這樣做,具有 API 級別 27 或更高級別的用戶會更改 BottomNav 圖標的顏色,但是具有 API 級別低於 27 的用戶無法享受這些功能
// IF your want code in Activity :
// if you want navigation-bar icon color drak.
getWindow().setNavigationBarColor(getContext().getResources().getColor(R.color.white));
View view = getWindow().getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
// if you want navigation-bar icon color white.
getWindow().setNavigationBarColor(getContext().getResources().getColor(R.color.black));
View view = getWindow().getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
// IF your want code in Fragment :
// if you want navigation-bar icon color drak.
getActivity().getWindow().setNavigationBarColor(getContext().getResources().getColor(R.color.white));
View view = getActivity().getWindow().getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
// if you want navigation-bar icon color white.
getActivity().getWindow().setNavigationBarColor(getContext().getResources().getColor(R.color.black));
View view = getActivity().getWindow().getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
如果您正在尋找一種簡單的 java 方法。 以下代碼有效
public static void setStatusBarColor(Activity A , int color , int color2 , boolean darkIcon) {
if (A != null && !A.isFinishing()) {
Window window = A.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
if(darkIcon){
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
}else {
window.getDecorView().setSystemUiVisibility(0);
}
window.setStatusBarColor(ContextCompat.getColor(A, color));
window.setNavigationBarColor(ContextCompat.getColor(A,color2));
}
}
內部活動
@Override
protected void onDestroy() {
super.onDestroy();
C.setStatusBarColor(this ,R.color.bg , R.color.navcolor ,false);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
C.setStatusBarColor(this ,R.color.bg , R.color.bg,true);
setContentView(R.layout.activity_teams_players);
}
據我所知,這些圖標是com.android.systemui的一部分,這就是為什么你需要root + patch或者注入(比如Xposed)才能改變它們。
從不同的角度考慮它。 一種可能性可能是將該活動的主題設置為亮或暗,然后以編程方式設置條的背景顏色。 其中一個主題應該有黑色圖標。
另一種選擇可能是完全隱藏條形圖https://developer.android.com/training/system-ui/navigation.html
然后使用您自己的按鈕在底部創建第二個工具欄。
只需在應用程序運行時添加這一行就可以了
val navView: BottomNavigationView = findViewById(R.id.nav_view)
navView.itemIconTintList = null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.