API
nsh/android
nsh/android 包含只有 Android 才有的 API。这个模块在所有平台上都可以导入,因此同一个 bundle 可以在所有平台运行:在其他平台上它的函数什么也不做,isAvailable 告诉你当前是否在 Android 上。
import { BackHandler, isAvailable, setStatusBarBackgroundColor, Toast } from "nsh/android";
元素和组件的 Android 专有属性不在这里:它们放在 android={{…}} 属性中(例如 <View android={{ elevation: 4, ripple: … }} />)。见平台专有代码。
#isAvailable
const isAvailable: boolean;
在 Android 上为 true,其他平台为 false。
#Toast
const Toast: {
show(message: string, duration?: "short" | "long" | null): void;
};
在屏幕底部显示一条简短消息(Android 的 toast)。duration 默认为 "short"。
import { Platform } from "nsh/device";
import { Toast } from "nsh/android";
import { Alert } from "nsh/ui/mobile";
const notify = (message: string) =>
Platform.OS === "android" ? Toast.show(message) : Alert.alert("Done", message);
#BackHandler
const BackHandler: {
addEventListener(event: "hardwareBackPress", listener: () => boolean | void): { remove(): void };
exitApp(): void;
};
系统返回键和返回手势。模态框和导航栈先处理返回操作(关闭模态框、导航栈出栈);只有它们都不处理时,BackHandler 的监听器才会运行。
| 成员 | 说明 |
|---|---|
addEventListener("hardwareBackPress", listener) | listener 处理了这次返回时返回 true。最后添加的监听器最先运行。没有监听器处理时,应用退出。返回一个可 remove() 的订阅。 |
exitApp() | 退出应用。 |
import { cleanup, signal } from "nsh";
import { BackHandler } from "nsh/android";
import { Alert } from "nsh/ui/mobile";
function Editor() {
const dirty = signal(false);
const sub = BackHandler.addEventListener("hardwareBackPress", () => {
if (!dirty()) return false; // 交给应用返回或退出
Alert.alert("Discard changes?", undefined, [{ text: "Keep" }, { text: "Discard", style: "destructive" }]).then(
(i) => i === 1 && BackHandler.exitApp(),
);
return true;
});
cleanup(() => sub.remove());
// ...
}
#setStatusBarBackgroundColor
function setStatusBarBackgroundColor(backgroundColor: string, animated?: boolean | null): void;
设置状态栏颜色,作为已渲染的 <StatusBar android={{ backgroundColor }}> 组件之下的基础值(最后挂载的 StatusBar 优先于该基础值)。它只在强制全面屏(edge-to-edge,API 35)之前的 Android 版本上生效;从 API 35 起状态栏是透明的,内容绘制在它下面。
setStatusBarBackgroundColor("#1e293b", true);
组件见 StatusBar。