HarmonyOS 多行文本末尾带标签时的缩进

现在存在多行文本,maxLines为2,文本末尾携带一个标签,遮盖标签一直存在,当文本末尾的文字即将到达标签区域时,直接剪切掉,类似于图片的样式,有什么实现方案么

HarmonyOS 多行文本末尾带标签时的缩进 -鸿蒙开发者社区

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

请参考demo:

//Index.ets
import measure from '@ohos.measure';
import { Tags } from './Tags';

function computeTextIndent(text:string):string{
  const sizeOptions:SizeOptions = measure.measureTextSize({
    textContent: text,
    fontSize: '10px'
  });
  let width = sizeOptions.width;
  if(typeof width === 'string'){
    return width.slice(0,width.length-2) + 10 + 'vp';
  }
  if(typeof width === 'number'){
    return width + 10 + 'vp';
  }
  return 0 + 'vp';
}

@Entry
@Component
struct Index {

  @Builder OverlayNode() {
    Column() {
      Tags({ tagsText: '新品新品', tagsType: 'newProduct' })
    }
  }

  build() {
    Column() {
      Row() {
        Text('这里是标题这里是标题这里是标题这里是标题这里是标题这里是标题这里是标题')
          .maxLines(2)
          .textOverflow({ overflow: TextOverflow.Ellipsis })
          .overlay(this.OverlayNode(), {
            offset: { x: 150, y: 20 } })
      }
      .height('100%')
      .width('100%')
    }
    .height('100%')
    .width('100%')
    .alignItems(HorizontalAlign.Start)
  }
}

//Tags.ets
@Component
export struct Tags {
  @Prop tagsText: string;
  @Prop tagsType: string;
  @Prop isFront: boolean = false;
  @Prop frontText: string;
  @Prop frontIcon: string;
  @State TagsOptions: TagsInterface = {};

  aboutToAppear(){
    let tagsColor:TagsColor = {};
    Object.entries(TagsTypeOption).forEach((item:[string,TagsColor])=>{
      if(item[0] === this.tagsType){
        tagsColor = item[1];
      }
    })
    this.TagsOptions = {
      text:this.tagsText,
      frontText:this.frontText,
      frontIcon:this.frontIcon,
      tagsColor:tagsColor
    }
  }

  build() {
    Row() {
      if (this.isFront) {
        if(this.TagsOptions.frontText){
          Text(this.TagsOptions.frontText)
            .fontColor(this.TagsOptions.tagsColor?.color)
            .fontSize('10vp')
            .height('16vp')
            .padding('2vp')
            .backgroundColor(this.TagsOptions.tagsColor?.frontBgColor)
            .border({
              width: { right: '1vp', left:'0vp', top:'0vp', bottom:'0vp' },
              color: this.TagsOptions.tagsColor?.borderColor,
            })
        }
        if(this.TagsOptions.frontIcon){
          Image($r(this.TagsOptions.frontIcon))
            .size({ width: '14vp', height: '14vp' })
            .padding('2vp')
            .backgroundColor(this.TagsOptions.tagsColor?.frontBgColor)
            .border({
              width: { right: '1vp', left:'0vp', top:'0vp', bottom:'0vp' },
              color: this.TagsOptions.tagsColor?.borderColor,
            })
        }
      }
      Text(this.TagsOptions.text)
        .fontColor(this.TagsOptions.tagsColor?.color)
        .fontSize('10vp')
        .height('16vp')
        .padding('2vp')
        .backgroundColor(this.TagsOptions.tagsColor?.bgColor)

    }
    .height('16vp')
    .border({
      width: '1vp',
      color: this.TagsOptions.tagsColor?.borderColor,
      radius: '2vp'
    })
  }
}

class TagsInterface {
  text?:string
  frontText?:string
  frontIcon?:string
  tagsColor?:TagsColor
}
class TagsColor{
  bgColor?:string
  borderColor?:string
  color?:string
  frontBgColor?:string
}

class TagsType{
  newProduct?:TagsColor
  bonusPoint?:TagsColor
  saveMoney?:TagsColor
}

const TagsTypeOption:TagsType = {
  newProduct: {
    bgColor: "#00af3b",
    borderColor: "#00af3b",
    color: "#ffffff",
    frontBgColor: "",
  },
  bonusPoint:{
    bgColor: "#feffff",
    borderColor: "#fa8027",
    color: "#f2c5a0",
    frontBgColor: "#fff7f4",
  },
  saveMoney:{
    bgColor: "#feffff",
    borderColor: "#ffdada",
    color: "#ff0005",
    frontBgColor: "#ffeded",
  }
}

您这边可以参考上面的demo,对标签位置和大小进行调整,以达到遮盖整个文字而非有半个文字露出在外面的效果。

或者参考该demo,使用stack组件达成遮盖效果:

https://developer.huawei.com/consumer/cn/forum/topic/0208153595060533866?fid=0109140870620153026

目前并不支持对限制最大行数以后的文本进行剪切,您可以尝试参考以下demo,减少接收文字字符数,以达到类似的效果:

https://developer.huawei.com/consumer/cn/forum/topic/0208151014948857136?fid=0109140870620153026

分享
微博
QQ
微信
回复
2天前
相关问题
多行文字后面添加标签
369浏览 • 1回复 待解决
HarmonyOS 计算多行文本布局宽高
130浏览 • 1回复 待解决
HarmonyOS 多行文本中间省略不生效
31浏览 • 1回复 待解决
多行文本省略展开与显示
1344浏览 • 1回复 待解决
HarmonyOS Text多行文本不能居中对齐
980浏览 • 1回复 待解决
Text怎么显示html标签文本
4688浏览 • 1回复 待解决
Text怎么解析展示html标签文本
2315浏览 • 1回复 待解决
如何对文本实现首行缩进
527浏览 • 1回复 待解决
HarmonyOS 命令行进行文本输入
192浏览 • 1回复 待解决
HarmonyOS Html文本标签解析器
183浏览 • 1回复 待解决
如何实现标签文本换行
1177浏览 • 1回复 待解决
HarmonyOS 如何进行文本文件读取?
343浏览 • 1回复 待解决