android.text.Layout类的使用及代码示例

x33g5p2x  于2022-01-23 转载在 其他  
字(9.7k)|赞(0)|评价(0)|浏览(142)

本文整理了Java中android.text.Layout类的一些代码示例,展示了Layout类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Layout类的具体详情如下:
包路径:android.text.Layout
类名称:Layout

Layout介绍

暂无

代码示例

代码示例来源:origin: nickbutcher/plaid

@Nullable Layout startLayoutMaxLines, @NonNull ReflowData endData,
           @NonNull Layout endLayout, @Nullable Layout endLayoutMaxLines) {
int textLength = endLayout.getText().length();
int currentStartLine = 0;
int currentStartRunLeft = 0;
int currentEndRunLeft = 0;
int currentEndRunTop = 0;
List<Run> runs = new ArrayList<>(endLayout.getLineCount());
  boolean startMaxEllipsis = false;
  if (startLayoutMaxLines != null) {
    char letter = startLayoutMaxLines.getText().charAt(i);
    startMaxEllipsis = letter == '…';
    if (letter != '\uFEFF'              // beyond max lines
      startLine = startLayoutMaxLines.getLineForOffset(i);
      startMax = true;
    startLine = startLayout.getLineForOffset(i);
  boolean endMaxEllipsis = false;
  if (endLayoutMaxLines != null) {
    char letter = endLayoutMaxLines.getText().charAt(i);
    endMaxEllipsis = letter == '…';
    if (letter != '\uFEFF'              // beyond max lines
      endLine = endLayoutMaxLines.getLineForOffset(i);
      endMax = true;

代码示例来源:origin: nickbutcher/plaid

private TouchableUrlSpan getPressedSpan(TextView textView, Spannable spannable, MotionEvent
    event) {
  int x = (int) event.getX();
  int y = (int) event.getY();
  x -= textView.getTotalPaddingLeft();
  y -= textView.getTotalPaddingTop();
  x += textView.getScrollX();
  y += textView.getScrollY();
  Layout layout = textView.getLayout();
  int line = layout.getLineForVertical(y);
  int off = layout.getOffsetForHorizontal(line, x);
  TouchableUrlSpan[] link = spannable.getSpans(off, off, TouchableUrlSpan.class);
  TouchableUrlSpan touchedSpan = null;
  if (link.length > 0) {
    touchedSpan = link[0];
  }
  return touchedSpan;
}

代码示例来源:origin: nickbutcher/plaid

private Bitmap createBitmap(@NonNull ReflowData data, @NonNull Layout layout) {
  Bitmap bitmap = Bitmap.createBitmap(
      data.bounds.width(), data.bounds.height(), Bitmap.Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  canvas.translate(data.textPosition.x, data.textPosition.y);
  layout.draw(canvas);
  return bitmap;
}

代码示例来源:origin: stackoverflow.com

Layout l = textview.getLayout();
if (l != null) {
  int lines = l.getLineCount();
  if (lines > 0)
    if (l.getEllipsisCount(lines-1) > 0)
      Log.d(TAG, "Text is ellipsized");
}

代码示例来源:origin: stackoverflow.com

Layout layout = this.getLayout();
if (layout != null)
{
  int line = layout.getLineForVertical(y);
  int offset = layout.getOffsetForHorizontal(line, x);

  // At this point, "offset" should be what you want - the character index
}

代码示例来源:origin: stackoverflow.com

int pos = editText.getSelectionStart();
Layout layout = editText.getLayout();
int line = layout.getLineForOffset(pos);
int baseline = layout.getLineBaseline(line);
int ascent = layout.getLineAscent(line);
float x = layout.getPrimaryHorizontal(pos);
float y = baseline + ascent;

代码示例来源:origin: wangdan/AisenWeiBo

@Override
public boolean onTouch(View v, MotionEvent event) {
  Layout layout = ((TextView) v).getLayout();
  int x = (int) event.getX();
  int y = (int) event.getY();
  int line = layout.getLineForVertical(y);
  int offset = layout.getOffsetForHorizontal(line, x);
  SpannableString value = SpannableString.valueOf(tv.getText());
  switch (event.getActionMasked()) {
    case MotionEvent.ACTION_DOWN:
      MyURLSpan[] urlSpans = value.getSpans(0, value.length(), MyURLSpan.class);
      float lineWidth = layout.getLineWidth(line);
            webURLEmotionSpan.setClickDown(true);
            value.setSpan(webURLEmotionSpan, start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
            tv.setText(value);
        lineWidth = layout.getLineWidth(line);

代码示例来源:origin: stackoverflow.com

manip.setOnTouchListener(new View.OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
    Layout layout = ((TextView) v).getLayout();
    int x = (int)event.getX();
    int y = (int)event.getY();
    if (layout!=null){
      int line = layout.getLineForVertical(y);
      int offset = layout.getOffsetForHorizontal(line, x);
      Log.v("index", ""+offset);
    }
    return true;
  }
});

代码示例来源:origin: stackoverflow.com

ClickableSpan[] link = buffer.getSpans(index, index, ClickableSpan.class);
    if (link.length != 0) {
      if (action == MotionEvent.ACTION_UP) {
        Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]));
x -= textView.getTotalPaddingLeft();
y -= textView.getTotalPaddingTop();
x += textView.getScrollX();
y += textView.getScrollY();
Layout layout = textView.getLayout();
int line = layout.getLineForVertical(y);
synchronized (sLineBounds) {
  layout.getLineBounds(line, sLineBounds);
  if (! sLineBounds.contains(x, y)) {
    return -1;
Spanned text = (Spanned) textView.getText();
int lineStart = layout.getLineStart(line);
int lineEnd = layout.getLineEnd(line);
int lineLength = lineEnd - lineStart;
if (lineLength == 0) {

代码示例来源:origin: seven332/EhViewer

private boolean action(int what, TextView widget, Spannable buffer) {
  Layout layout = widget.getLayout();
  int padding = widget.getTotalPaddingTop() +
      widget.getTotalPaddingBottom();
  int areatop = widget.getScrollY();
  int areabot = areatop + widget.getHeight() - padding;
  int linetop = layout.getLineForVertical(areatop);
  int linebot = layout.getLineForVertical(areabot);
  int first = layout.getLineStart(linetop);
  int last = layout.getLineEnd(linebot);
  ClickableSpan[] candidates = buffer.getSpans(first, last, ClickableSpan.class);
    if (buffer.getSpanStart(FROM_BELOW) >= 0) {
      selStart = selEnd = buffer.length();

代码示例来源:origin: stackoverflow.com

int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
ClickableSpan[] link = buffer.getSpans(
  off, off, ClickableSpan.class);
  } else if (action == MotionEvent.ACTION_DOWN) {
    Selection.setSelection(buffer,
        buffer.getSpanStart(link[0]),
        buffer.getSpanEnd(link[0]));

代码示例来源:origin: baidu/speech-samples

private void scrollLog(String message) {
  Spannable colorMessage = new SpannableString(message + "\n");
  colorMessage.setSpan(new ForegroundColorSpan(0xff0000ff), 0, message.length(),
      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  mShowText.append(colorMessage);
  Layout layout = mShowText.getLayout();
  if (layout != null) {
    int scrollAmount = layout.getLineTop(mShowText.getLineCount()) - mShowText.getHeight();
    if (scrollAmount > 0) {
      mShowText.scrollTo(0, scrollAmount + mShowText.getCompoundPaddingBottom());
    } else {
      mShowText.scrollTo(0, 0);
    }
  }
}

代码示例来源:origin: MCMrARM/revolution-irc

public static CharSequence apply(TextView textView, CharSequence text) {
  if (text == null || !(text instanceof Spannable))
    return text;
  Spannable s = (Spannable) text;
  for (AlignToPointSpan span : s.getSpans(0, text.length(),
      AlignToPointSpan.class)) {
    span.mMargin = (int) Layout.getDesiredWidth(text, 0, s.getSpanStart(span.mAnchor),
        textView.getPaint());
  }
  return text;
}

代码示例来源:origin: Manabu-GT/ExpandableTextView

private static int getRealTextViewHeight(@NonNull TextView textView) {
  int textHeight = textView.getLayout().getLineTop(textView.getLineCount());
  int padding = textView.getCompoundPaddingTop() + textView.getCompoundPaddingBottom();
  return textHeight + padding;
}

代码示例来源:origin: facebook/litho

private int getTextOffsetAt(int x, int y) {
 final int line = mLayout.getLineForVertical(y);
 float start = getHorizontal(mLayout.getLineStart(line), line);
 final int endOffset = mLayout.getLineVisibleEnd(line) - 1;
  end = mLayout.getPrimaryHorizontal(0);
 } else {
  final float[] endWidth = new float[1];
  mLayout.getPaint().getTextWidths(mText, endOffset, endOffset + 1, endWidth);
  end =
    getHorizontal(endOffset, line) + (mLayout.isRtlCharAt(endOffset) ? -1 : 1) * endWidth[0];
  return mLayout.getOffsetForHorizontal(line, x);
 } catch (ArrayIndexOutOfBoundsException e) {

代码示例来源:origin: hanks-zyh/HTextView

@Override
  protected void drawFrame(Canvas canvas) {
    Layout layout = mHTextView.getLayout();
    int gapIndex = 0;
    for (int i = 0; i < layout.getLineCount(); i++) {
      int lineStart = layout.getLineStart(i);
      int lineEnd = layout.getLineEnd(i);
      float lineLeft = layout.getLineLeft(i);
      float lineBaseline = layout.getLineBaseline(i);
      String lineText = mText.subSequence(lineStart, lineEnd).toString();
      for (int c = 0; c < lineText.length(); c++) {
        int alpha = alphaList.get(gapIndex);
        mPaint.setAlpha((int) ((255 - alpha) * progress + alpha));
        canvas.drawText(String.valueOf(lineText.charAt(c)), lineLeft, lineBaseline, mPaint);
        lineLeft += gapList.get(gapIndex++);
      }
    }
  }
}

代码示例来源:origin: weexteam/weex-hackernews

layout = previousLayout;
if (mNumberOfLines != UNSET && mNumberOfLines > 0 && mNumberOfLines < layout.getLineCount()) {
 int lastLineStart, lastLineEnd;
 lastLineStart = layout.getLineStart(mNumberOfLines - 1);
 lastLineEnd = layout.getLineEnd(mNumberOfLines - 1);
 if (lastLineStart < lastLineEnd) {
  String text = mText.subSequence(0, lastLineStart).toString() +
              truncate(mText.substring(lastLineStart, lastLineEnd),
                  mTextPaint, layout.getWidth(), textOverflow);
  spanned = createSpanned(text);
  return new StaticLayout(spanned, mTextPaint, (int) Math.ceil(textWidth),

代码示例来源:origin: MCMrARM/revolution-irc

private void showHandle(TextSelectionHandlePopup handle, long id, int offset) {
  TextView textView = findTextViewByItemId(id);
  if (textView != null) {
    int line = textView.getLayout().getLineForOffset(offset);
    int y = textView.getLayout().getLineBottom(line);
    float x = textView.getLayout().getPrimaryHorizontal(offset);
    handle.show(textView, (int) x, y);
  } else {
    handle.hide();
  }
}

代码示例来源:origin: facebook/TextLayoutBuilder

((Spannable) mParams.text).getSpans(0, mParams.text.length() - 1, ClickableSpan.class);
 hasClickableSpans = spans.length > 0;
switch (mParams.measureMode) {
 case MEASURE_MODE_UNSPECIFIED:
  width = (int) Math.ceil(Layout.getDesiredWidth(mParams.text, mParams.paint));
  break;
 case MEASURE_MODE_EXACTLY:
  width =
    Math.min(
      (int) Math.ceil(Layout.getDesiredWidth(mParams.text, mParams.paint)),
      mParams.width);
  break;

代码示例来源:origin: ZhangQinhao/MONKOVEL

@Override
  public void subscribe(ObservableEmitter<List<String>> e) throws Exception {
    TextPaint mPaint = (TextPaint) mView.getPaint();
    mPaint.setSubpixelText(true);
    Layout tempLayout = new StaticLayout(paragraphstr, mPaint, mView.getContentWidth(), Layout.Alignment.ALIGN_NORMAL, 0, 0, false);
    List<String> linesdata = new ArrayList<String>();
    for (int i = 0; i < tempLayout.getLineCount(); i++) {
      linesdata.add(paragraphstr.substring(tempLayout.getLineStart(i), tempLayout.getLineEnd(i)));
    }
    e.onNext(linesdata);
    e.onComplete();
  }
});

相关文章