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。