HarmonyOS 鸿蒙Next 如何禁止tabbar随软键盘的上弹而避让

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何禁止tabbar随软键盘的上弹而避让 使用navigation进行分屏适配时,右侧聊天页面底部栏需要避让软键盘,当点击输入框时右侧的底部栏弹至键盘之上。

但现在发现当键盘弹起时,左侧页面的tabbar也会跟着避让弹起。请问如何让tabbar保持在底部呢?

目前是使用

window.getLastWindow(getContext(this)).then(currentWindow => {
currentWindow.getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE)
})

来控制键盘弹起方式。如果改成KeyboardAvoidMode.OFFSET,虽然tabbar不弹起,但右侧页面的避让效果又会有问题。如何才能实现tabbar不弹起,而右侧页面避让效果像KeyboardAvoidMode.RESIZE这样呢?

非常感谢!


更多关于HarmonyOS 鸿蒙Next 如何禁止tabbar随软键盘的上弹而避让的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以左右都添加 .expandSafeArea([SafeAreaType.KEYBOARD],[ SafeAreaEdge.BOTTOM])

然后右侧通过监听键盘高度来实现textinput避让。

//1.Entry.ets中存储windowClass。 onWindowStageCreate(windowStage: window.WindowStage): void { // Main window is created, set main page for this ability hilog.info(0x0000, ‘testTag’, ‘%{public}s’, ‘Ability onWindowStageCreate’); windowStage.loadContent(‘pages/Index’, (err) => { 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.’); let windowClass = windowStage.getMainWindowSync(); AppStorage.setOrCreate(‘windowClass’, windowClass); }); }

//2.index.ets //左侧使用 .expandSafeArea([SafeAreaType.KEYBOARD],[ SafeAreaEdge.BOTTOM]) @Entry @Component struct Index { @State fontColor: string = ‘#182431’ @State selectedFontColor: string = ‘#007DFF’ @State currentIndex: number = 0 private controller: TabsController = new TabsController() @Provide pathStack: NavPathStack = new NavPathStack(); private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] @Builder tabBuilder(index: number, name: string) { Column() { Text(name) .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor) .fontSize(16) .fontWeight(this.currentIndex === index ? 500 : 400) Divider() .strokeWidth(2) .color(’#007DFF’) .opacity(this.currentIndex === index ? 1 : 0) } .width(‘100%’) } build() { Navigation(this.pathStack) { Column() { Tabs({ barPosition: BarPosition.End, index: this.currentIndex, controller: this.controller }) { TabContent() { Column() { List({ space: 20, initialIndex: 0 }) { ForEach(this.arr, (item: number) => { ListItem() { Text(’’ + item) .width(‘100%’) .height(100) .fontSize(16) .textAlign(TextAlign.Center) .borderRadius(10) .backgroundColor(0xFFFFFF) .onClick((){ this.pathStack.pushPathByName(‘PageOne’,true) }) } }, (item: string) => item) } } .width(‘100%’).height(‘100%’).backgroundColor(’#00CB87’) } .tabBar(this.tabBuilder(0, ‘green’))

      TabContent() {
        Column().width('100%').height('100%').backgroundColor('#007DFF')
      }
      .tabBar(this.tabBuilder(1, 'blue'))

      TabContent() {
        Column().width('100%').height('100%').backgroundColor('#FFBF00')
      }
      .tabBar(this.tabBuilder(2, 'yellow'))

      TabContent() {
        Column().width('100%').height('100%').backgroundColor('#E67C92')
      }
      .tabBar(this.tabBuilder(3, 'pink'))
    }
    .vertical(false)
    .barMode(BarMode.Fixed)
    .onChange((index: number) => {
      this.currentIndex = index
    })
    .width('100%')
    .height('100%')
    .backgroundColor('#F1F3F5')
  }
  .width('100%')
  .expandSafeArea([SafeAreaType.KEYBOARD],[ SafeAreaEdge.BOTTOM])

}
.hideTitleBar(true)

} }

//3.Page.ets import { window } from ‘@kit.ArkUI’;

@Builder export function PageOneBuilder() { Page() }

@Entry @Component struct Page { @State keyboardHeight: number = 0; //监听键盘高度

aboutToAppear(): void { let windowClass: window.Window | undefined = AppStorage.get<window.Window>(‘windowClass’) windowClass?.on(‘keyboardHeightChange’, (data) => { this.keyboardHeight = data <= 0 ? 0 : px2vp(data) - 16;//16是间隙 }); }

build() { NavDestination(){ Column () { TextInput({placeholder:‘请输入文字’}) } .backgroundColor(Color.Red) .expandSafeArea([SafeAreaType.KEYBOARD],[ SafeAreaEdge.BOTTOM]) .margin({ bottom:this.keyboardHeight}) .justifyContent(FlexAlign.End) .layoutWeight(1) .width(‘100%’) } .height(‘100%’) .width(‘100%’) } }

更多关于HarmonyOS 鸿蒙Next 如何禁止tabbar随软键盘的上弹而避让的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,禁止TabBar随软键盘弹出而避让,可以通过调整页面布局和软键盘弹出时的行为设置来实现。具体操作步骤如下:

  1. 检查布局文件: 确保TabBar所在的布局文件(如XML布局)中没有设置与软键盘避让相关的属性。例如,检查是否有android:windowSoftInputMode属性被设置为adjustResizeadjustPan,在HarmonyOS中,虽然不直接使用Android属性,但需确保布局逻辑未隐含此类行为。

  2. 修改页面配置: 在页面的配置文件(如.json或.ets文件)中,查找是否有与软键盘处理相关的配置,确保没有启用自动调整布局以适应软键盘的选项。

  3. 自定义软键盘弹出处理: 如果以上步骤未能解决问题,可以考虑在代码中监听软键盘弹出事件,并手动调整TabBar的位置或布局,使其不受软键盘影响。这通常涉及到监听系统事件或使用框架提供的API来获取软键盘状态。

  4. 测试与验证: 在多种设备和屏幕尺寸上测试修改后的效果,确保TabBar在不同情况下均不会随软键盘弹出而避让。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部