android.text.StaticLayout#Builder ( )源码实例Demo

下面列出了android.text.StaticLayout#Builder ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: Telegram-FOSS   文件: StaticLayoutEx.java
public static StaticLayout createStaticLayout2(CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad, TextUtils.TruncateAt ellipsize, int ellipsisWidth, int maxLines) {
    if (Build.VERSION.SDK_INT >= 23) {
        StaticLayout.Builder builder = StaticLayout.Builder.obtain(source, 0, source.length(), paint, ellipsisWidth)
                .setAlignment(align)
                .setLineSpacing(spacingadd, spacingmult)
                .setIncludePad(includepad)
                .setEllipsize(TextUtils.TruncateAt.END)
                .setEllipsizedWidth(ellipsisWidth)
                .setMaxLines(maxLines)
                .setBreakStrategy(StaticLayout.BREAK_STRATEGY_HIGH_QUALITY)
                .setHyphenationFrequency(StaticLayout.HYPHENATION_FREQUENCY_NONE);
        return builder.build();
    } else {
        return createStaticLayout(source, 0, source.length(), paint, width, align, spacingmult, spacingadd, includepad, ellipsize, ellipsisWidth, maxLines, true);
    }
}
 
源代码2 项目: Telegram   文件: StaticLayoutEx.java
public static StaticLayout createStaticLayout2(CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad, TextUtils.TruncateAt ellipsize, int ellipsisWidth, int maxLines) {
    if (Build.VERSION.SDK_INT >= 23) {
        StaticLayout.Builder builder = StaticLayout.Builder.obtain(source, 0, source.length(), paint, ellipsisWidth)
                .setAlignment(align)
                .setLineSpacing(spacingadd, spacingmult)
                .setIncludePad(includepad)
                .setEllipsize(TextUtils.TruncateAt.END)
                .setEllipsizedWidth(ellipsisWidth)
                .setMaxLines(maxLines)
                .setBreakStrategy(StaticLayout.BREAK_STRATEGY_HIGH_QUALITY)
                .setHyphenationFrequency(StaticLayout.HYPHENATION_FREQUENCY_NONE);
        return builder.build();
    } else {
        return createStaticLayout(source, 0, source.length(), paint, width, align, spacingmult, spacingadd, includepad, ellipsize, ellipsisWidth, maxLines, true);
    }
}
 
源代码3 项目: android-proguards   文件: ReflowText.java
private Layout createLayout(ReflowData data, Context context, boolean enforceMaxLines) {
    TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
    paint.setTextSize(data.textSize);
    paint.setColor(data.textColor);
    paint.setLetterSpacing(data.letterSpacing);
    if (data.fontName != null) {
        paint.setTypeface(FontUtil.get(context, data.fontName));
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        StaticLayout.Builder builder =  StaticLayout.Builder.obtain(
                data.text, 0, data.text.length(), paint, data.textWidth)
                .setLineSpacing(data.lineSpacingAdd, data.lineSpacingMult)
                .setBreakStrategy(data.breakStrategy);
        if (enforceMaxLines && data.maxLines != -1) {
            builder.setMaxLines(data.maxLines);
            builder.setEllipsize(TextUtils.TruncateAt.END);
        }
        return builder.build();
    } else {
        return new StaticLayout(
                data.text,
                paint,
                data.textWidth,
                Layout.Alignment.ALIGN_NORMAL,
                data.lineSpacingMult,
                data.lineSpacingAdd,
                true);
    }
}
 
/** A method that allows to create a StaticLayout with maxLines on all supported API levels. */
public StaticLayout build() throws StaticLayoutBuilderCompatException {
  if (source == null) {
    source = "";
  }


  int availableWidth = Math.max(0, width);
  CharSequence textToDraw = source;
  if (maxLines == 1) {
    textToDraw = TextUtils.ellipsize(source, paint, availableWidth, ellipsize);
  }

  end = Math.min(textToDraw.length(), end);
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (isRtl) {
      alignment = Alignment.ALIGN_OPPOSITE;
    }
    // Marshmallow introduced StaticLayout.Builder which allows us not to use
    // the hidden constructor.
    StaticLayout.Builder builder =
        StaticLayout.Builder.obtain(
            textToDraw, start, end, paint, availableWidth);
    builder.setAlignment(alignment);
    builder.setIncludePad(includePad);
    TextDirectionHeuristic textDirectionHeuristic = isRtl
        ? TextDirectionHeuristics.RTL
        : TextDirectionHeuristics.LTR;
    builder.setTextDirection(textDirectionHeuristic);
    if (ellipsize != null) {
      builder.setEllipsize(ellipsize);
    }
    builder.setMaxLines(maxLines);
    return builder.build();
  }

  createConstructorWithReflection();
  // Use the hidden constructor on older API levels.
  try {
    return checkNotNull(constructor)
        .newInstance(
            textToDraw,
            start,
            end,
            paint,
            availableWidth,
            alignment,
            checkNotNull(textDirection),
            1.0f,
            0.0f,
            includePad,
            null,
            availableWidth,
            maxLines);
  } catch (Exception cause) {
    throw new StaticLayoutBuilderCompatException(cause);
  }
}