Expo 或 React Native:即使应用程序未处于活动状态,如何为整个屏幕或部分屏幕着色
Expo or React Native: How to tint the entire screen or just a portion even if app isn't active
我正在寻找一种方法来为用户的屏幕着色某种色调,并随着时间的推移改变这种色调。 (想想 F.lux 或 Night Shift 或任何数量的当前可用的蓝光减少器)。有什么办法可以用 React Native and/or Expo 做到这一点吗?我知道 iOS 不允许用户在没有越狱的情况下这样做,但我相信这至少对 Android 是可行的?谢谢你的时间。
App-wide 过滤解决方案(Android 和仅网络,如果您切换到其他应用程序,过滤器将关闭)
您可以使用我在下面的示例中命名为“filter”的 React 组件制作过滤器。
这在 iOS 上不起作用,因为我没有找到一种方法让 iOS 知道所有用户点击都是针对过滤器下方的元素,而不是过滤器本身。
在下面的示例中,您的整个应用程序由 表示,在此示例中它是一个简单的按钮。
import React, { useState } from "react";
import { View, Button } from "react-native";
export default function () {
let [opacity] = useState(0.8);
const YourApp = () => (
<Button onPress={() => alert("clicked !!")} title="Click me" />
);
return (
<View
name="filterContainer"
style={{
flex: 1,
width: "100%",
height: "100%",
position: "absolute",
alignItems: "center",
justifyContent: "center",
}}
>
<View
name="filter"
style={{
flex: 1,
width: "100%",
height: "100%",
pointerEvents: "none",
position: "absolute",
elevation: 2,
zIndex: 2,
backgroundColor: "green",
opacity: opacity,
}}
></View>
<View
name="appContainer"
style={{
flex: 1,
position: "absolute",
elevation: 1,
zIndex: 1,
}}
>
<YourApp />
</View>
</View>
);
}
System-wide 亮度变化(但没有色调变化,这只是 iOS 和 Android)
如果您使用的是 Expo,则可以使用 SYSTEM_BRIGHTNESS (https://docs.expo.io/versions/latest/sdk/permissions/#permissionssystem_brightness)。
注意: 大多数模拟器和网络浏览器的系统亮度不起作用。它只适用于真实设备。
这里是一个如何将系统亮度设置为 10% 的例子:
import * as Permissions from "expo-permissions";
import * as Brightness from "expo-brightness";
async function getAndSetSystemBrightnessAsync() {
const { status } = await Permissions.askAsync(Permissions.SYSTEM_BRIGHTNESS);
if (status === "granted") {
// Set system brightness to 10 %
await Brightness.setSystemBrightnessAsync(0.1);
const bright = await Brightness.getSystemBrightnessAsync();
console.log(bright);
} else {
// Web browsers
console.error("System brightness permission not granted");
}
}
useEffect(() => {
// Ask for system brightness permission
getAndSetSystemBrightnessAsync();
}, []);
我正在寻找一种方法来为用户的屏幕着色某种色调,并随着时间的推移改变这种色调。 (想想 F.lux 或 Night Shift 或任何数量的当前可用的蓝光减少器)。有什么办法可以用 React Native and/or Expo 做到这一点吗?我知道 iOS 不允许用户在没有越狱的情况下这样做,但我相信这至少对 Android 是可行的?谢谢你的时间。
App-wide 过滤解决方案(Android 和仅网络,如果您切换到其他应用程序,过滤器将关闭)
您可以使用我在下面的示例中命名为“filter”的
在下面的示例中,您的整个应用程序由
import React, { useState } from "react";
import { View, Button } from "react-native";
export default function () {
let [opacity] = useState(0.8);
const YourApp = () => (
<Button onPress={() => alert("clicked !!")} title="Click me" />
);
return (
<View
name="filterContainer"
style={{
flex: 1,
width: "100%",
height: "100%",
position: "absolute",
alignItems: "center",
justifyContent: "center",
}}
>
<View
name="filter"
style={{
flex: 1,
width: "100%",
height: "100%",
pointerEvents: "none",
position: "absolute",
elevation: 2,
zIndex: 2,
backgroundColor: "green",
opacity: opacity,
}}
></View>
<View
name="appContainer"
style={{
flex: 1,
position: "absolute",
elevation: 1,
zIndex: 1,
}}
>
<YourApp />
</View>
</View>
);
}
System-wide 亮度变化(但没有色调变化,这只是 iOS 和 Android)
如果您使用的是 Expo,则可以使用 SYSTEM_BRIGHTNESS (https://docs.expo.io/versions/latest/sdk/permissions/#permissionssystem_brightness)。
注意: 大多数模拟器和网络浏览器的系统亮度不起作用。它只适用于真实设备。
这里是一个如何将系统亮度设置为 10% 的例子:
import * as Permissions from "expo-permissions";
import * as Brightness from "expo-brightness";
async function getAndSetSystemBrightnessAsync() {
const { status } = await Permissions.askAsync(Permissions.SYSTEM_BRIGHTNESS);
if (status === "granted") {
// Set system brightness to 10 %
await Brightness.setSystemBrightnessAsync(0.1);
const bright = await Brightness.getSystemBrightnessAsync();
console.log(bright);
} else {
// Web browsers
console.error("System brightness permission not granted");
}
}
useEffect(() => {
// Ask for system brightness permission
getAndSetSystemBrightnessAsync();
}, []);