/// <summary> /// Move the selection end to the buffer offset physically below /// the current selection end. /// </summary> /// <remarks> /// Move the selection end to the buffer offset physically below /// the current selection end. /// </remarks> public static bool extendDown(android.text.Spannable text, android.text.Layout layout ) { int end = getSelectionEnd(text); int line = layout.getLineForOffset(end); if (line < layout.getLineCount() - 1) { int move; if (layout.getParagraphDirection(line) == layout.getParagraphDirection(line + 1)) { float h = layout.getPrimaryHorizontal(end); move = layout.getOffsetForHorizontal(line + 1, h); } else { move = layout.getLineStart(line + 1); } extendSelection(text, move); return(true); } else { if (end != text.Length) { extendSelection(text, text.Length); return(true); } } return(true); }
private bool deleteLine(android.view.View view, android.text.Editable content) { if (view is android.widget.TextView) { android.text.Layout layout = ((android.widget.TextView)view).getLayout(); if (layout != null) { int line = layout.getLineForOffset(android.text.Selection.getSelectionStart(content )); int start = layout.getLineStart(line); int end = layout.getLineEnd(line); if (end != start) { content.delete(start, end); return(true); } } } return(false); }
/// <summary> /// Move the cursor to the buffer offset physically below the current /// offset, or return false if the cursor is already on the bottom line. /// </summary> /// <remarks> /// Move the cursor to the buffer offset physically below the current /// offset, or return false if the cursor is already on the bottom line. /// </remarks> public static bool moveDown(android.text.Spannable text, android.text.Layout layout ) { int start = getSelectionStart(text); int end = getSelectionEnd(text); if (start != end) { int min = System.Math.Min(start, end); int max = System.Math.Max(start, end); setSelection(text, max); if (min == 0 && max == text.Length) { return(false); } return(true); } else { int line = layout.getLineForOffset(end); if (line < layout.getLineCount() - 1) { int move; if (layout.getParagraphDirection(line) == layout.getParagraphDirection(line + 1)) { float h = layout.getPrimaryHorizontal(end); move = layout.getOffsetForHorizontal(line + 1, h); } else { move = layout.getLineStart(line + 1); } setSelection(text, move); return(true); } } return(false); }
private static int findEdge(android.text.Spannable text, android.text.Layout layout , int dir) { int pt = getSelectionEnd(text); int line = layout.getLineForOffset(pt); int pdir = layout.getParagraphDirection(line); if (dir * pdir < 0) { return(layout.getLineStart(line)); } else { int end = layout.getLineEnd(line); if (line == layout.getLineCount() - 1) { return(end); } else { return(end - 1); } } }