关于设置屏幕旋转遇到的两个问题(HarmonyOS 鸿蒙Next)
关于设置屏幕旋转遇到的两个问题(HarmonyOS 鸿蒙Next) 关于设置屏幕旋转遇到的两个问题
- 如何获取当前设备方向,PORTRAIT, LANDSCAPE, PORTRAIT_INVERTED, LANDSCAPE_INVERTED等等。
- 如何监控设备方向发生变化,例如从LANDSCAPE变为PORTRAIT, 或者从PORTRAIT变为LANDSCAPE。
4 回复
2.如何监控设备方向发生变化
display.on("change", callback); // 监听屏幕状态改变
可能需要记录一下:变更前的状态; 通过变更前的状态、与当前状态比较,来确定是怎么转的
更多关于关于设置屏幕旋转遇到的两个问题(HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
- 如何获取当前设备方向
display
接口
- 使用
display
接口获取当前旋转方向,可以放置在监听中持续获取
display.getDefaultDisplaySync().rotation;
其中,orientation
的枚举如下
名称 | 值 | 描述 |
---|---|---|
PORTRAIT | 1 | 表示竖屏显示模式。 系统能力: SystemCapability.WindowManager.WindowManager.Core 元服务API: 从 API version 11 开始,该接口支持在元服务中使用。 |
LANDSCAPE | 2 | 表示横屏显示模式。 元服务API: 从 API version 12 开始,该接口支持在元服务中使用。 系统能力: SystemCapability.WindowManager.WindowManager.Core |
PORTRAIT_INVERTED | 3 | 表示反向竖屏显示模式。 系统能力: SystemCapability.WindowManager.WindowManager.Core 元服务API: 从 API version 12 开始,该接口支持在元服务中使用。 |
LANDSCAPE_INVERTED | 4 | 表示反向横屏显示模式。 系统能力: SystemCapability.WindowManager.WindowManager.Core 元服务API: 从 API version 12 开始,该接口支持在元服务中使用。 |
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5#orientation9
获取屏幕方向可以参考
import sensor from '@ohos.sensor';
import base from '@ohos.base';
import { data } from '@kit.TelephonyKit';
export function onDegree(callback: base.Callback<string>): void {
sensor.on(sensor.SensorId.GRAVITY, (data: sensor.GravityResponse) => {
let degree: number = -1;
let rotation: string = 'INVALID';
degree = CalDegree(data.x, data.y, data.z)
console.log(JSON.stringify(degree))
if (degree >= 0 && (degree <= 30 || degree >= 330)) {
rotation = "ROTATION_0";
} else if (degree >= 60 && degree <= 120) { // Use ROTATION_90 when degree range is[60, 120]
rotation = "ROTATION_90";
} else if (degree >= 150 && degree <=
210) { // Use ROTATION_180 when degree range is[150, 210]
rotation = "ROTATION_180";
} else if (degree >= 240 && degree <=
300) { // Use ROTATION_270 when degree range is[240, 300]
rotation = "ROTATION_270";
}
callback(rotation);
});
}
function CalDegree(x: number, y: number, z: number): number {
let degree: number =
-1; // 3 为 有效_增量_角度_阈值_系数
if ((x * x + y * y) * 3 < z * z) {
return degree;
}
degree = 90 - (Number)(Math.round(Math.atan2(y, -x) / Math.PI * 180));
return degree >= 0 ? degree % 360 : degree % 360 + 360;
}
@Entry
@Component
struct ss {
build() {
Column() {
Button('获取手机设备朝向').onClick(() => {
onDegree((data) => {
console.log(data);
})
})
}
}
}
在HarmonyOS鸿蒙Next中,设置屏幕旋转可能会遇到以下两个问题:
-
屏幕旋转无法生效:检查设备是否启用了自动旋转功能。在设置中,找到“显示”或“屏幕”选项,确保“自动旋转”开关已打开。如果开关已打开但仍无法旋转,可能是应用本身不支持旋转,或者系统存在兼容性问题。
-
屏幕旋转方向错误:某些应用在旋转时可能会出现方向错误,这是由于应用未正确处理屏幕旋转事件。可以尝试重启设备或更新应用到最新版本。如果问题依旧,可能是系统或应用本身的BUG,需要等待后续系统更新修复。
确保设备传感器正常工作,以及系统和应用均为最新版本,可以减少此类问题的发生。