9433cfb9创建于 2025年12月31日历史提交
<template>
  <scroll-view class="uni-flex-item uni-padding-wrap">
    <!-- #ifdef APP-ANDROID -->
    <page-head :title="title"></page-head>
    <view class="uni-title">
      <text class="uni-subtitle-text">无约束宽高</text>
      <text class="uni-subtitle-text">{{info}}</text>
    </view>
    <view>
      <text id="text" class="text"></text>
    </view>
    <view class="uni-title">
      <text class="uni-subtitle-text">约束宽高-多行</text>
      <text class="uni-subtitle-text">{{info2}}</text>
    </view>
    <view class="text-box">
      <text id="text2" class="text"></text>
    </view>
    <view class="uni-title">
      <text class="uni-subtitle-text">约束宽高-单行</text>
      <text class="uni-subtitle-text">{{info3}}</text>
    </view>
    <view class="text-box">
      <text id="text3" class="text"></text>
    </view>
    <view class="uni-title">
      <text class="uni-subtitle-text">嵌套</text>
      <text class="uni-subtitle-text">{{info4}}</text>
    </view>
    <view class="text-box">
      <text id="text4" class="text"></text>
    </view>
    <!-- #endif -->
  </scroll-view>
</template>

<script setup>
  const title = 'text-layout';
  // #ifdef APP-ANDROID
  const info = ref('');
  const info2 = ref('');
  const info3 = ref('');
  const info4 = ref('');

  const setTextLayout = () => {
    const element = uni.getElementById('text') as UniTextElement;
    const layout = new UniTextLayout();
    layout.setText('HBuilderX,轻巧、极速,极客编辑器;uni-app x,终极跨平台方案;uts,大一统语言;');
    layout.setColor('red');
    layout.setFontFamily('AlimamaDaoLiTiTTF');
    layout.setFontSize('30px');
    layout.setFontStyle('italic');
    layout.setFontWeight('bold');
    layout.setLineHeight('3');
    layout.setTextShadow('2px 4px rgba(202,207,17,0.5)');
    layout.setTextDecorationLine('underline');
    const measureSize = layout.measure({} as UniLayoutConstraintSize);
    element.style.setProperty('width', measureSize.width);
    element.style.setProperty('height', measureSize.height);
    element.setTextLayout(layout);
    const size = element.getContentSize();
    info.value = 'width: ' + size.width + 'px height: ' + size.height + 'px';
  };

  const setTextLayout2 = () => {
    const element = uni.getElementById('text2') as UniTextElement;
    const layout = new UniTextLayout();
    layout.setText('HBuilderX,轻巧、极速,极客编辑器;uni-app x,终极跨平台方案;uts,大一统语言;')
    layout.setColor('red');
    layout.setLineHeight('3');
    layout.setTextAlign('center');
    const measureSize = layout.measure({
      maxWidth: 300,
      minHeight: 100
    } as UniLayoutConstraintSize);
    element.style.setProperty('width', measureSize.width);
    element.style.setProperty('height', measureSize.height);
    element.setTextLayout(layout);
    const size = element.getContentSize();
    info2.value = 'width: ' + size.width + 'px height: ' + size.height + 'px';
  };

  const setTextLayout3 = () => {
    const element = uni.getElementById('text3') as UniTextElement;
    const layout = new UniTextLayout();
    layout.setText('HBuilderX,轻巧、极速,极客编辑器;uni-app x,终极跨平台方案;uts,大一统语言;')
    layout.setColor('red');
    layout.setLineHeight('30px');
    layout.setTextOverflow('ellipsis');
    layout.setWhiteSpace("nowrap");
    const measureSize = layout.measure({
      maxWidth: 300
    } as UniLayoutConstraintSize);
    element.style.setProperty('width', measureSize.width);
    element.style.setProperty('height', measureSize.height);
    element.setTextLayout(layout);
    const size = element.getContentSize();
    info3.value = 'width: ' + size.width + 'px height: ' + size.height + 'px';
  };

  const setTextLayout4 = () => {
    const element = uni.getElementById('text4') as UniTextElement;
    const layout = new UniTextLayout();
    layout.setText('HBuilderX,轻巧、极速,极客编辑器;uts,大一统语言;');
    layout.setColor('red');
    layout.setFontSize('25px');
    const child = new UniTextLayout();
    child.setText("uni-app x,终极跨平台方案;");
    layout.append(child);
    const child2 = new UniTextLayout();
    child2.setText('uts,大一统语言;');
    child2.setColor("blue");
    child2.setFontSize("20px");
    layout.append(child2);
    const measureSize = layout.measure({
      maxWidth: 300
    } as UniLayoutConstraintSize);
    element.style.setProperty('width', measureSize.width);
    element.style.setProperty('height', measureSize.height);
    element.setTextLayout(layout);
    const size = element.getContentSize();
    info4.value = 'width: ' + size.width + 'px height: ' + size.height + 'px';
  };

  onLoad(() => {
    uni.loadFontFace({
      family: 'AlimamaDaoLiTiTTF',
      source: "url('/static/font/AlimamaDaoLiTi.otf')"
    });
  });

  onReady(() => {
    setTextLayout();
    setTextLayout2();
    setTextLayout3();
    setTextLayout4();
  });
  // #endif
</script>

<style>
  .text-box {
    align-items: center;
  }

  .text {
    background-color: #ffffff;
  }
</style>