private void updateCursorPosition(int cursorIndex, int top, int bottom, float horizontal) { // ...
if (mTempRect == null) mTempRect = new Rect(); mCursorDrawable[cursorIndex].getPadding(mTempRect); //光标的 padding
// ...
// 上下边距的最终值为 top - mTempRect.top 和 bottom + mTempRect.bottom mCursorDrawable[cursorIndex].setBounds(left, top - mTempRect.top, left + width, bottom + mTempRect.bottom);
}
那么 top 和 bottom 的值是多少 ?
Editor.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
void updateCursorsPositions() { //...
Layout layout = mTextView.getLayout(); Layout hintLayout = mTextView.getHintLayout(); final int offset = mTextView.getSelectionStart(); final int line = layout.getLineForOffset(offset); // 算出当前是第几行 final int top = layout.getLineTop(line); // 算出第 line 行的顶部坐标 final int bottom = layout.getLineTop(line + 1); // 算出第 line+1 行的顶部坐标