2017-08-06 50 views
0

不包括單詞包裝線?Android可能在EditText中繪製行號?

我想要做的是有一個類延伸EditText畫行號到每一行的左邊。在它的表面上,通過迭代行0super.getLineCount()並在行首開始繪製索引,這非常簡單。

但是我沒有看到一個簡單的說法;跳過被包裝的行(不以\n結束的行)。例如在vim它想:

example

什麼我用做上述方案(線數未跳過換行)

protected void onDraw(Canvas canvas) { 

...   
     int count = getLineCount(); 
     for (int i = 0; i < count; ++i) { 
      getLineBounds(i, mRect); 
      String num = String.valueOf(i + 1); 
      mPaint.getTextBounds(num, 0, num.length(), mNumberRect); 
      canvas.drawText(num, NUMBER_LEFT_PAD, mRect.top + mTextHeight - 5, mPaint); 
     } 

... 

    super.onDraw(canvas); 
} 

我怎麼會檢測哪些線是字包線和哪些線是虛線?

+0

'getLayout()。getLineStart(i)'會給你第一個字符在給定行上的位置。檢查'position - 1'字符是否爲'\ n',如果是,則不要畫出行號。您需要使用單獨的「int」來跟蹤繪製的線數。 –

回答

-1

我推薦它。(draw line numbers in edittext

@Override 
     protected void onDraw(Canvas canvas) { 
      int baseline = getBaseline() 
      for (int i = 0; i < getLineCount(); i++) { 
       canvas.drawText("" + (i+1), rect.left, baseline, paint); 
       baseline += getLineHeight(); 
      } 
      super.onDraw(canvas); 
     } 
+2

這正是我試圖避免這個問題的努力。我的問題的整個身體正在解釋這(我現在有什麼)和我想要完成的事情之間的區別。不管怎麼說,還是要謝謝你。 –

1

都會響起邁克說,你可以通過檢查每個渲染管線,看它是否是一個真正的線(由換行符\n之前)完成這個或如果它是實際的行,只包含字符線和遞增/繪製行號。

protected void onDraw(Canvas canvas) { 
    int count = getLineCount(); 
    int lineNumber = 1; 
    for (int i = 0; i < count; ++i) { 
     getLineBounds(i, mRect); 
     String num = String.valueOf(i + 1); 
     mPaint.getTextBounds(num, 0, num.length(), mNumberRect); 
     if (i == 0) { 
      canvas.drawText(num, NUMBER_LEFT_PAD, mRect.top + mTextHeight - 5, mPaint); 
      ++lineNumber; 
     } else if (getText().charAt(getLayout().getLineStart(i) - 1) == '\n') { 
      canvas.drawText(num, NUMBER_LEFT_PAD, mRect.top + mTextHeight - 5, mPaint); 
      ++lineNumber; 
     } 
    } 
    super.onDraw(canvas); 
}