HarmonyOS鸿蒙Next中怎么避免输入法把整个RichEditor往上顶,代码如下

HarmonyOS鸿蒙Next中怎么避免输入法把整个RichEditor往上顶,代码如下 我这边实现功能,Scroll里面包含RichEiditor,当RichEditor内容较多时,软件盘会将整体的内容往上顶,或导致上述代码有问题,如何控制只滚动scroll里面的内容?

build() {
  Column() {
    this.topTool()
    Scroll(this.scroller) {
      Column() {
        Image($r('app.media.background_triangle_line_up'))
          .backgroundColor($r('app.color.color_F6F8F9'))
        RichEditor(this.options)
          .onReady(() => {
            this.controller.addTextSpan(" ", {
              style: {
                fontColor: Color.Black,
                fontSize: fontSizeArray[this.fontProgress-1],
                fontFamily: this.fontName
              }
            })
          })
          .onSelect((value: RichEditorSelection) => {
            this.start = value.selection[0];
            this.end = value.selection[1];
          })
          .aboutToIMEInput((value: RichEditorInsertValue) => {
            LogUtil.logD("---------------------- aboutToIMEInput ----------------------")
            return true;
          })
          .onIMEInputComplete((value: RichEditorTextSpanResult) => {
            LogUtil.logD("---------------------- onIMEInputComplete ---------------------")
          })
          .aboutToDelete((value: RichEditorDeleteValue) => {
            return true;
          })
          .onDeleteComplete(() => {
            LogUtil.logD("---------------------- onDeleteComplete ------------------------")
          })
          .width("100%")
      }
      .width("100%")
      .layoutWeight(1)


    }
    .layoutWeight(1)
    .edgeEffect(EdgeEffect.Fade)


    .width('100%')
    .align(Alignment.Top)
    .backgroundColor(Color.White)
    .margin({ left: 10, right: 10, top: 10 })

    Line().height(0.5).width('100%').backgroundColor($r('app.color.color_EDEDED'))

    Column() {
      this.bottomTool()

    }

  }
  .margin({
    bottom: px2vp(this.bottomRectHeight),
    top: px2vp(this.topRectHeight)
  })
  .layoutWeight(1)
  .backgroundColor($r('app.color.color_F6F8F9'))
}

更多关于HarmonyOS鸿蒙Next中怎么避免输入法把整个RichEditor往上顶,代码如下的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

在scroll上面添加属性.expandSafeArea([SafeAreaType.KEYBOARD, SafeAreaType.SYSTEM])。

这个demo如下

@Entry
@Component
struct RichEditorExample {
  controller: RichEditorController = new RichEditorController()

  build() {
    Column() {
      Scroll(){
        RichEditor({ controller: this.controller })
          // 绑定自定义键盘
          .height(1000)
          .borderWidth(1)
          .borderColor(Color.Red)
          .width("100%")
      }
      .expandSafeArea([SafeAreaType.KEYBOARD, SafeAreaType.SYSTEM])
    }
  }
}

更多关于HarmonyOS鸿蒙Next中怎么避免输入法把整个RichEditor往上顶,代码如下的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,避免输入法将整个RichEditor往上顶的问题,可以通过以下方式处理:

使用adjustResize属性:

config.json文件中,为对应的Ability设置windowSoftInputModeadjustResize。这样可以确保输入法弹出时,应用窗口会调整大小,而不是将整个布局上移。

"abilities": [
    {
        "name": ".MainAbility",
        "windowSoftInputMode": "adjustResize",
        ...
    }
]

布局调整:

在布局文件中,确保RichEditor的父容器能够正确响应输入法的弹出。可以使用ScrollViewNestedScrollView包裹RichEditor,以便在输入法弹出时,内容可以滚动。

<ScrollView
    ohos:id="$+id:scrollView"
    ohos:width="match_parent"
    ohos:height="match_parent">
    <RichEditor
        ohos:id="$+id:richEditor"
        ohos:width="match_parent"
        ohos:height="match_content" />
</ScrollView>

监听输入法状态:

通过监听输入法的状态变化,动态调整RichEditor的位置或布局。可以使用InputMethodManager来获取输入法的状态,并根据状态调整布局。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.addOnInputMethodListener(new InputMethodManager.OnInputMethodListener() {
    @Override
    public void onInputMethodShown() {
        // 输入法显示时的处理
    }

    @Override
    public void onInputMethodHidden() {
        // 输入法隐藏时的处理
    }
});

通过以上方法,可以有效避免输入法将整个RichEditor往上顶的问题。

在HarmonyOS鸿蒙Next中,可以通过设置windowSoftInputMode来避免输入法将整个RichEditor顶起。在config.json文件中,找到对应的ability配置,添加如下属性:

"metaData": {
    "customizeData": [
        {
            "name": "windowSoftInputMode",
            "value": "adjustPan"
        }
    ]
}

adjustPan模式会调整布局,仅将输入框滚动到可见区域,而不是整个界面。这样可以避免RichEditor被顶起的问题。

回到顶部