HarmonyOS Next如何进行沉浸模式下顶部窗口控制条避让适配?
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
HarmonyOS Next如何进行沉浸模式下顶部窗口控制条避让适配?
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
在HarmonyOS Next中,进行沉浸模式下顶部窗口控制条避让适配,可以通过以下方式实现:
设置沉浸式布局:
通过setWindowLayoutFullScreen
方法设置窗口布局是否为沉浸式布局。沉浸式布局下,应用布局不避让状态栏、导航栏以及智慧多窗顶部横条,可能导致组件与顶部横条重叠,引发文字遮挡、点击事件冲突等问题。若需避免此类问题,可设置isLayoutFullScreen
值为false
,使窗口布局为非沉浸式布局。
获取并避让顶部控制条区域:
当应用不使用窗口避让能力(即设置窗口为沉浸式布局)时,可通过getWindowAvoidArea
接口获取屏幕顶部需要规避的矩阵区域(topRect
),然后应用可对应做布局避让。同时,可通过监听avoidAreaChange
事件来动态调整布局,以适应系统规避区域的变化。
以下是一个简单的示例代码,展示了如何获取窗口并设置沉浸式布局,以及获取避让区域:
import { BusinessError } from '@kit.BasicServicesKit';
import { window } from '@kit.ArkUI';
@Entry
@Component
struct Index {
@State message: string = '非沉浸式布局';
private windowClass: window.Window | undefined = undefined;
aboutToAppear(): void {
try {
window.getLastWindow(getContext(this), (err: BusinessError, data) => {
const errCode: number = err.code;
if (errCode) {
console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err));
return;
}
this.windowClass = data;
console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));
// 设置沉浸式布局(如需非沉浸式布局,可设置为false)
this.windowClass.setWindowLayoutFullScreen(true, (err: BusinessError) => {
const errCode: number = err.code;
if (errCode) {
console.error('Failed to set the window layout to full-screen mode. Cause: ' + JSON.stringify(err));
return;
}
console.info('Succeeded in setting the window layout to full-screen mode.');
});
// 获取并打印避让区域
const topAvoidArea = this.windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM);
console.info('Top avoid area: ' + JSON.stringify(topAvoidArea));
});
} catch (exception) {
console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(exception));
}
}
// 其他页面布局和逻辑...
}
通过以上方式,HarmonyOS Next应用可在沉浸模式下实现顶部窗口控制条的避让适配。
1 回答1.1k 阅读✓ 已解决
1 回答1.3k 阅读
1 回答1.2k 阅读
1 回答1.1k 阅读
1 回答1.1k 阅读
1 回答970 阅读
1 回答943 阅读
顶部横条的避让可通过以下两种方式适配,具体可以参考顶部窗口控制条避让适配智慧多窗。
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。