问题描述
我正在开发一些不是我创建的应用程序,我想为 API 21 及更高版本设置导航栏和通知栏颜色。该应用程序的主题是纯 XML,没有新的应用程序主题库。我什至可以设置那些具有如此奇怪的主题设置并仅使用 xml 的颜色吗?有人可以解释一下菜鸟友好的地方要添加什么吗?
我尝试了各种东西
<item name="android:navigationBarColor">@color/theme_color</item>
但我似乎总是把事情搞糊涂。
我只有 themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.phttpp.TitleBar" parent="android:Theme">
<item name="android:windowTitleBackgroundStyle">@style/windowTitleBackgroundStyle</item>
<item name="android:windowTitleStyle">@style/windowTitleStyle</item>
<item name="android:windowTitleSize">50dip</item>
</style>
<style name="Theme.dialog.TitleBar" parent="@android:style/Theme.Dialog">
<item name="android:windowTitleStyle">@style/windowTitleStyle</item>
<item name="android:windowTitleSize">50dip</item>
</style>
</resources>
和
values 文件夹中的styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="windowTitleBackgroundStyle">
<item name="android:background">#00BCD4</item>
</style>
<style name="windowTitleStyle">
<item name="android:textColor">#FFFFFF</item>
<item name="android:padding">12dip</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">16sp</item>
<item name="android:background">#00BCD4</item>
<item name="android:maxLines">1</item>
</style>
</resources>
解决方法
在 themes.xml 中添加这些行在我的情况下有效
<style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight.NoActionBar">
...
colors and other stuff
...
<!-- Status bar color. -->
<item name="android:statusBarColor" >@color/my_color</item>
<item name="android:fitsSystemWindows">true</item>
<item name="android:windowLightStatusBar">true</item>
<!-- Navigation bar color. -->
<item name="android:navigationBarColor">@color/my_color</item>
</style>
,
我找到了一个适用于 API21 及更高版本的解决方案。 我没有更改主题和样式的任何内容,但是我将colors.xml 添加到/values-v21
if (Build.VERSION.SDK_INT >= 21) {
Window window = this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimaryDark));
getWindow().setNavigationBarColor(getResources().getColor(R.color.colorGray));
}
并将其添加到我的 Java 代码中的 onCreate 的主要活动中
import { StatusBar } from 'expo-status-bar';
import React,{ useState } from 'react';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import useCachedResources from './hooks/useCachedResources';
import useColorScheme from './hooks/useColorScheme';
import Navigation from './navigation';
import PlayerWidget from './components/PlayerWidget';
import Amplify from 'aws-amplify';
import awsmobile from './src/aws-exports';
import { withAuthenticator } from 'aws-amplify-react-native';
Amplify.configure(awsmobile);
//import the contexts
import { AppContext } from './AppContext';
import { StatusContext } from './StatusContext';
import { AlbumContext } from './AlbumContext';
import { songFinishContext } from './songFinishContext';
import { AlbumHeaderPause } from './AlbumPauseContext';
import { playlistContext } from './playlistContext';
import { CurrentSongIDContext } from './CurrentSongIDContext';
export default function App() {
const isLoadingComplete = useCachedResources();
const colorScheme = useColorScheme();
const [currentSongId,setCurrentSongId] = useState<string | null>(null);
const [songId,setSongId] = useState<string | null>(null);
const [songStatus,setSongStatus] = useState<boolean | null>(false);
const [Albumid,setAlbumid] = useState<string | null>(null);
const [finish,setFinish] = useState<boolean | null>(false);
const [pauseAlbum,setPauseAlbum] = useState<boolean | null>(false);
const [playlist,setPlaylist] = useState<string | string[]>([]);
if (!isLoadingComplete) {
return null;
} else {
return (
<SafeAreaProvider>
<AppContext.Provider value={{
songId,setSongId: (id: string) => setSongId(id),}}>
<StatusContext.Provider value={{
songStatus,setSongStatus: (isPlaying: boolean) => setSongStatus(isPlaying),}}>
<AlbumContext.Provider value={{
Albumid,setAlbumid: (albumId: string) => setAlbumid(albumId),}}>
<songFinishContext.Provider value={{
finish,setFinish: (didJustFinish: boolean) => setFinish(didJustFinish),}}>
<AlbumHeaderPause.Provider value={{
pauseAlbum,setPauseAlbum: (pauseAl: boolean) => setPauseAlbum(pauseAl),}}>
<playlistContext.Provider value={{
playlist,setPlaylist: (songID: string[]) => setPlaylist(songID),}}>
<CurrentSongIDContext.Provider value={{
currentSongId,setCurrentSongId: (id: string) => setCurrentSongId(id),}}>
<Navigation colorScheme={colorScheme} />
<StatusBar />
<PlayerWidget />
</CurrentSongIDContext.Provider>
</playlistContext.Provider>
</AlbumHeaderPause.Provider>
</songFinishContext.Provider>
</AlbumContext.Provider>
</StatusContext.Provider>
</AppContext.Provider>
</SafeAreaProvider>
);
}
}