List of usage examples for android.text Layout getLineForVertical
public int getLineForVertical(int vertical)
From source file:Main.java
public static int getFistLine(TextView tv) { // int height = tv.getHeight(); int scrollY = tv.getScrollY(); Layout layout = tv.getLayout(); int firstVisibleLineNumber = layout.getLineForVertical(scrollY); // int lastVisibleLineNumber = // layout.getLineForVertical(scrollY+height); return firstVisibleLineNumber; }
From source file:Main.java
public static void setTextWithLinks(TextView textView, String htmlText) { setHtmlText(textView, htmlText);//from w w w . j a v a 2s. c om textView.setOnTouchListener((v, event) -> { int action = event.getAction(); if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { int x = (int) event.getX(); int y = (int) event.getY(); TextView widget = (TextView) v; 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 = Spannable.Factory.getInstance().newSpannable(widget.getText()).getSpans(off, off, ClickableSpan.class); if (link.length != 0) { if (action == MotionEvent.ACTION_UP) { link[0].onClick(widget); } return true; } } return false; }); }
From source file:Main.java
public static int getLastLine(TextView tv) { int height = tv.getHeight(); int scrollY = tv.getScrollY(); Layout layout = tv.getLayout(); if (layout == null) { return 0; }/*from ww w . ja v a 2 s . c om*/ // int firstVisibleLineNumber = layout.getLineForVertical(scrollY); int lastVisibleLineNumber = layout.getLineForVertical(scrollY + height); return lastVisibleLineNumber; }
From source file:io.github.hidroh.materialistic.AppUtils.java
public static void setTextWithLinks(TextView textView, CharSequence html) { textView.setText(html);//from w w w .jav a 2s.c om // TODO https://code.google.com/p/android/issues/detail?id=191430 //noinspection Convert2Lambda textView.setOnTouchListener(new View.OnTouchListener() { @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { int x = (int) event.getX(); int y = (int) event.getY(); TextView widget = (TextView) v; 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 = Spannable.Factory.getInstance().newSpannable(widget.getText()) .getSpans(off, off, ClickableSpan.class); if (link.length != 0) { if (action == MotionEvent.ACTION_UP) { link[0].onClick(widget); } return true; } } return false; } }); }
From source file:com.waz.zclient.pages.main.conversation.views.row.message.views.TextMessageWithTimestamp.java
private boolean isClickInsideLink(MotionEvent event) { Object text = messageTextView.getText(); if (text != null && text instanceof Spanned) { Spannable buffer = (Spannable) text; int x = (int) event.getX(); int y = (int) event.getY(); x -= messageTextView.getTotalPaddingLeft(); y -= messageTextView.getTotalPaddingTop(); x += messageTextView.getScrollX(); y += messageTextView.getScrollY(); Layout layout = messageTextView.getLayout(); int line = layout.getLineForVertical(y); int off = layout.getOffsetForHorizontal(line, x); ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class); return link.length > 0; }//from www.ja v a 2s . co m return false; }
From source file:com.example.pdftranslator.ScreenSlidePageFragment.java
private void determineWordSelected(View v, MotionEvent event) { Layout layout = ((TextView) v).getLayout(); int x = (int) event.getX(); int y = (int) event.getY(); Log.i("NAME", Thread.currentThread().getId() + " in touch event fragment" + " " + event.toString()); if (layout != null) { // Log.i( "NAME", ActivityTextDisplayer.letter_index.values().toString()); int line = layout.getLineForVertical(y); int offset = layout.getOffsetForHorizontal(line, x); int copy_offset = offset; String word = ActivityTextDisplayer.letter_index.get(offset); // Log.i("NAME", ""+offset + " ---" + word + "--- " ); while (true) { copy_offset--;//from ww w . ja va 2s. c o m if (ActivityTextDisplayer.letter_index.get(copy_offset).equals(" ") || ActivityTextDisplayer.letter_index.get(copy_offset).equals("\n") || ActivityTextDisplayer.letter_index.get(copy_offset).equals(".")) break; word = ActivityTextDisplayer.letter_index.get(copy_offset) + word; } copy_offset = offset; while (true) { copy_offset++; if (ActivityTextDisplayer.letter_index.get(copy_offset).equals(" ") || ActivityTextDisplayer.letter_index.get(copy_offset).equals("\n") || ActivityTextDisplayer.letter_index.get(copy_offset).equals(".")) break; word = word + ActivityTextDisplayer.letter_index.get(copy_offset); } String params[] = { word, Language.ENGLISH.toString(), Language.ROMANIAN.toString() }; new InternetConnection(getActivity()).execute(params); Log.i("NAME", "" + offset + " " + line + " ------" + ActivityTextDisplayer.letter_index.get(offset) + "----- -----" + word + "------"); } }
From source file:org.openintents.notepad.NoteEditor.java
@Override protected void onResume() { super.onResume(); if (DEBUG) {//from w w w .ja v a 2 s .c o m Log.d(TAG, "onResume"); } if (DEBUG) { Log.d(TAG, "mDecrypted: " + mDecryptedText); } // Set auto-link on or off, based on the current setting. int autoLink = PreferenceActivity.getAutoLinkFromPreference(this); mText.setAutoLinkMask(autoLink); mEncrypted = 0; if (mState == STATE_EDIT || (mState == STATE_INSERT) || mState == STATE_EDIT_EXTERNAL_NOTE) { getNoteFromContentProvider(); } else if (mState == STATE_EDIT_NOTE_FROM_SDCARD) { getNoteFromFile(); } if (mEncrypted == 0 || mDecryptedText != null) { applyInsertText(); } // Make sure that we don't use the link movement method. // Instead, we need a blend between the arrow key movement (for regular // navigation) and // the link movement (so the user can click on links). mText.setMovementMethod(new ArrowKeyMovementMethod() { public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { // This block is copied and pasted from LinkMovementMethod's // onTouchEvent (without the part that actually changes the // selection). int action = event.getAction(); if (action == MotionEvent.ACTION_UP) { int x = (int) event.getX(); 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); if (link.length != 0) { link[0].onClick(widget); return true; } } return super.onTouchEvent(widget, buffer, event); } }); setTheme(loadTheme()); startupSearch(); }
From source file:org.telegram.ui.ChatActivity.java
private boolean spanClicked(ListView list, View view, int textViewId) { final TextView widget = (TextView) view.findViewById(textViewId); if (widget == null) { return false; }//from w ww.j av a 2 s. c o m try { list.offsetRectIntoDescendantCoords(widget, mLastTouch); int x = mLastTouch.right; int y = mLastTouch.bottom; x -= widget.getTotalPaddingLeft(); y -= widget.getTotalPaddingTop(); x += widget.getScrollX(); y += widget.getScrollY(); final Layout layout = widget.getLayout(); if (layout == null) { return false; } final int line = layout.getLineForVertical(y); final int off = layout.getOffsetForHorizontal(line, x); final float left = layout.getLineLeft(line); if (left > x || left + layout.getLineWidth(line) < x) { return false; } final Editable buffer = new SpannableStringBuilder(widget.getText()); if (buffer == null) { return false; } final ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class); if (link.length == 0) { return false; } link[0].onClick(widget); return true; } catch (Exception e) { FileLog.e("tmessages", e); return false; } }