Navigation(this.pathInfo) {
// ...
}
.mode(this.currentBreakPoint === 'sm' ? NavigationMode.Stack : this.notesNavMode) 在EntryAbility.ets文件的onWindowStageCreate中获取到window。
import { ConfigurationConstant, UIAbility } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
const DOMAIN = 0x0000;
export default class EntryAbility extends UIAbility {
onCreate(): void {
try {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
} catch (err) {
hilog.error(DOMAIN, 'testTag', 'Failed to set colorMode. Cause: %{public}s', JSON.stringify(err));
}
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
AppStorage.setOrCreate('windowClass', windowStage.getMainWindowSync());
// Main window is created, set main page for this ability
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
return;
}
hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
});
}
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground');
}
}; 可以增加Navigation组件的mode属性代码适配逻辑,保证在屏幕横屏时,可以分栏显示。
import { window } from '@kit.ArkUI';
import { display } from '@kit.ArkUI';
@Entry
@Component
struct Index {
windowClass: window.Window | undefined = AppStorage.get('windowClass');
currentBreakPoint: WidthBreakpoint = this.getUIContext().getWindowWidthBreakpoint();
currentWindowStatusType: WindowStatusType | undefined = this.windowClass?.getWindowStatus();
@State currentMode: NavigationMode = NavigationMode.Stack;
pathInfos: NavPathStack = new NavPathStack();
setCurrentMode() {
// 判断屏幕方向,横屏时分栏
if (display.getDefaultDisplaySync().orientation === display.Orientation.LANDSCAPE ||
display.getDefaultDisplaySync().orientation === display.Orientation.LANDSCAPE_INVERTED) {
if (this.currentWindowStatusType === 4) {
this.currentMode = NavigationMode.Stack;
} else {
this.currentMode = NavigationMode.Split;
}
} else {
// 纵向时根据横向断点适配分栏
this.currentMode = this.currentBreakPoint <= 2 ? NavigationMode.Stack : NavigationMode.Split;
}
}
aboutToAppear(): void {
this.setCurrentMode();
this.windowClass?.on('windowSizeChange', () => {
this.currentBreakPoint = this.getUIContext().getWindowWidthBreakpoint();
this.setCurrentMode();
});
this.windowClass?.on('windowStatusChange', (WindowStatusType) => {
this.currentWindowStatusType = WindowStatusType;
});
}
build() {
Navigation(this.pathInfos) {
Column() {
Text('测试分屏时,是否可以分栏显示');
};
}
.mode(this.currentMode);
}
}