HarmonyOS 控制虚拟键盘抬起时页面的避让模式,能否指定部分布局不自动响应键盘抬起?

调用了windowClass.getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE)。发现所有被键盘遮挡的布局 ,都会被系统自动往上推动。请问有没有办法,让部分页面的被键盘遮挡的布局不在虚拟键盘抬起的时候,自动被推上去。

HarmonyOS
2024-09-29 11:54:25
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

demo是通过监听键盘高度,修改组件margin({bottom:})来实现,如果您在键盘收起的时候需要隐藏键盘顶部布局,可以解开注释。

 // .visibility(this.keyboardHeight == 0 ? Visibility.None : Visibility.Visible) 

其中:

this.keyboardHeight = data <= 0 ? 0 : px2vp(data) - (AppStorage.get('bottomHeight') as number) 

是弹起之后减去安全区域导航条高度。

请参考:

// Index .ets  
import { window } from '@kit.ArkUI';  
  
@Entry  
@Component  
struct Index {  
  @State keyboardHeight:number = 0  
  aboutToAppear() {  
    let windowClass: window.Window = (AppStorage.get('windowStage') as window.WindowStage).getMainWindowSync()  
    windowClass.on('keyboardHeightChange', (data) => {  
      console.log('data:',data)  
  
      this.keyboardHeight = data <= 0 ? 0 : px2vp(data) - (AppStorage.get('bottomHeight') as number)  
    });  
  }  
  build() {  
    Stack({alignContent:Alignment.BottomStart}) {  
      Column(){  
        TextInput()  
          .width('100%')  
          .backgroundColor(Color.White)  
          .margin({top:30})  
      }.height('100%').width('100%').layoutWeight(1).backgroundColor(Color.Green)  
  
      Text('111')  
        .width('100%')  
        .height(40)  
        .backgroundColor(Color.Yellow)  
        .margin({bottom:this.keyboardHeight})  
        // .visibility(this.keyboardHeight == 0 ? Visibility.None : Visibility.Visible)  
    }  
    .width('100%').height("100%")  
  }  
}

EntryAbility中onWindowStageCreate替换为:

 onWindowStageCreate(windowStage: window.WindowStage) {  
    // Main window is created, set main page for this ability  
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');  
    windowStage.loadContent('pages/Index', (err, data) => {  
      if (err.code) {  
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');  
        return;  
      }  
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');  
  
      let windowClass = windowStage.getMainWindowSync()  
      let bottomHeight = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR).bottomRect.height  
      AppStorage.setOrCreate('bottomHeight',px2vp(bottomHeight));  
      AppStorage.setOrCreate('windowStage',windowStage);  
    });  
}
分享
微博
QQ
微信
回复
2024-09-29 16:03:38
相关问题
如何控制键盘弹出对页面的遮挡?
2674浏览 • 1回复 待解决
键盘弹出页面的自适应
1406浏览 • 1回复 待解决
如何实现键盘避让机制
2618浏览 • 1回复 待解决
HarmonyOS 弹窗不避让键盘
405浏览 • 1回复 待解决
如何实现弹窗和软键盘避让
1390浏览 • 1回复 待解决
HarmonyOS 如何代码控制键盘弹出?
353浏览 • 1回复 待解决
页面上下拖动怎么隐藏键盘
835浏览 • 1回复 待解决
如何去实现部分har页面的热更新
311浏览 • 1回复 待解决
HarmonyOS如何收起键盘
330浏览 • 1回复 待解决