HarmonyOS鸿蒙Next中通过setPreferredOrientation设置横竖屏切换功能
HarmonyOS鸿蒙Next中通过setPreferredOrientation设置横竖屏切换功能 通过setPreferredOrientation 设置横竖屏切换功能
3 回复
效果图

实现思路
- 通过setPreferredOrientation api实现切换方向
- 通过windowSizeChange监控状态
示例完整代码(可运行)
import { common } from '@kit.AbilityKit'
import { window } from '@kit.ArkUI'
@Entry
@Component
struct Index {
@State isLandscape: boolean = false
private windowClass = ( this.getUIContext()?.getHostContext() as common.UIAbilityContext).windowStage.getMainWindowSync()
aboutToAppear(): void {
this.windowClass.on('windowSizeChange', () => {
this.isLandscape = !this.isLandscape
})
}
aboutToDisappear(): void {
this.windowClass.off('windowSizeChange')
}
build() {
Row(){
Text(this.isLandscape ? '横屏' : '竖屏').fontColor(Color.Black).fontWeight(900).fontSize(50).onClick(()=>{
if (this.isLandscape) {
this.windowClass.setPreferredOrientation(window.Orientation.PORTRAIT)
} else {
this.windowClass.setPreferredOrientation(window.Orientation.LANDSCAPE)
}
})
}
}
}
效果图完整代码(不可运行)
import { common } from '@kit.AbilityKit'
import { window } from '@kit.ArkUI'
@Component
export struct NavBar {
@Consume navPathStack:NavPathStack
@Consume isLandscape: boolean
private windowClass = ( this.getUIContext()?.getHostContext() as common.UIAbilityContext).windowStage.getMainWindowSync()
aboutToAppear(): void {
this.windowClass.on('windowSizeChange', () => {
this.isLandscape = !this.isLandscape
})
}
aboutToDisappear(): void {
this.windowClass.off('windowSizeChange')
}
build() {
Row(){
Image($r('app.media.player_jiantou')).width(30)
Row(){
Row() {
Text(this.isLandscape ? '横屏' : '竖屏').fontColor(Color.White).fontWeight(900).fontSize(16)
Image($r('app.media.player_hengping')).width(40)
}.onClick(()=>{
if (this.isLandscape) {
this.windowClass.setPreferredOrientation(window.Orientation.PORTRAIT)
} else {
this.windowClass.setPreferredOrientation(window.Orientation.LANDSCAPE)
}
})
Image($r('app.media.player_fenxaing')).width(30)
}
}.height(70).width('100%').justifyContent(FlexAlign.SpaceBetween)
}
}
更多关于HarmonyOS鸿蒙Next中通过setPreferredOrientation设置横竖屏切换功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,可通过windowManager.getLastWindow()获取窗口对象,调用setPreferredOrientation(orientation: Orientation)方法设置屏幕方向。参数orientation支持Orientation.PORTRAIT(竖屏)、Orientation.LANDSCAPE(横屏)、Orientation.PORTRAIT_INVERTED(反向竖屏)等枚举值。此方法可动态调整应用界面方向,需在UIAbility或页面中调用。
在HarmonyOS Next中,setPreferredOrientation 是用于控制应用或Ability屏幕方向的核心方法。它允许开发者动态设置或锁定屏幕的横竖屏状态,以提供更好的用户体验。
主要使用方式:
- 获取UIAbility上下文后,通过
UIAbilityContext.setPreferredOrientation()进行设置。 - 参数为
Orientation枚举,常用值包括:Orientation.UNSPECIFIED:遵循系统默认或传感器方向(通常为自动旋转)。Orientation.PORTRAIT:锁定为竖屏。Orientation.LANDSCAPE:锁定为横屏。Orientation.PORTRAIT_INVERTED/LANDSCAPE_INVERTED:锁定为特定方向的倒置竖屏或横屏(取决于设备支持)。Orientation.SENSOR:根据设备物理方向自动切换(类似自动旋转)。Orientation.SENSOR_PORTRAIT/SENSOR_LANDSCAPE:在竖屏或横屏范围内根据传感器自动切换。
典型应用场景:
- 视频播放器界面通常锁定为横屏。
- 阅读应用可能锁定为竖屏。
- 游戏可能根据关卡需要动态切换方向。
注意事项:
- 该设置通常作用于整个Ability,而非单个页面。
- 部分锁定方向可能受设备硬件或系统配置限制。
- 方向变更可能触发Ability的重建(如
onDestroy和onCreate),需妥善处理状态保存与恢复。
通过合理使用此API,可以确保应用界面在不同方向下保持稳定与兼容性。

