在编辑文本中绘制多行,例如记事本
我正在查看 android SDK 中的记事本示例,请参阅此处: http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
事情是它只绘制光标所在的当前行,例如 http://cdn2.staztic.com/screenshots/simple-notepad-app-al-1。 jpg
但我想显示填满屏幕的线条,例如 http://www.itismyworld.info/wp-content/uploads/2010/03/AK-notebook.png
任何建议都会很棒。相关的代码似乎在这里:
protected void onDraw(Canvas canvas) {
// Gets the number of lines of text in the View.
int count = getLineCount();
// Gets the global Rect and Paint objects
Rect r = mRect;
Paint paint = mPaint;
/*
* Draws one line in the rectangle for every line of text in the EditText
*/
for (int i = 0; i < count; i++) {
// Gets the baseline coordinates for the current line of text
int baseline = getLineBounds(i, r);
/*
* Draws a line in the background from the left of the rectangle to the right,
* at a vertical position one dip below the baseline, using the "paint" object
* for details.
*/
canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint);
}
// Finishes up by calling the parent method
super.onDraw(canvas);
}
I was taking a look at the notepad sample in the android SDK see here: http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
Thing is it only draws the current line the cursor is on e.g http://cdn2.staztic.com/screenshots/simple-notepad-app-al-1.jpg
But I'd like to display lines that fill up the screen e.g. http://www.itismyworld.info/wp-content/uploads/2010/03/AK-notebook.png
Any suggestions would be great. The relevent bit of code seems to be here:
protected void onDraw(Canvas canvas) {
// Gets the number of lines of text in the View.
int count = getLineCount();
// Gets the global Rect and Paint objects
Rect r = mRect;
Paint paint = mPaint;
/*
* Draws one line in the rectangle for every line of text in the EditText
*/
for (int i = 0; i < count; i++) {
// Gets the baseline coordinates for the current line of text
int baseline = getLineBounds(i, r);
/*
* Draws a line in the background from the left of the rectangle to the right,
* at a vertical position one dip below the baseline, using the "paint" object
* for details.
*/
canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint);
}
// Finishes up by calling the parent method
super.onDraw(canvas);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是基于 jkhouws1 的代码建议和谷歌的笔记编辑器
在 Eclipse IDE 中按 Ctrl +Shift+O 添加所有需要的导入
This is the code, based on jkhouws1's suggestion and google's note editor
In Eclipse IDE press Ctrl+Shift+O to add all needed imports
我认为这就是你所需要的:
I think this is what you need:
也许在 for 循环之后,您会绘制估计的*额外的线。
getHeight() 将返回 EditText 的高度(以像素为单位)
getLineHeight() 将为一根标准线的高度
,因此 getHeight/getlineHeight-getCount 将是剩余要绘制的线数。
您不能使用 getLineBounds,使用上述函数您可以计算剩余要绘制的线的位置。
*估计是因为文本格式可能会改变行高,但由于这些行中还没有文本,所以这不应该成为问题。但出于同样的原因,您应该只绘制剩余的线条,而不是用它来绘制所有线条。
maybe after that for loop, you draw estimated* additional lines.
getHeight() will return EditText's height in pixels
getLineHeight() will height of one standard line
so getHeight/getlineHeight-getCount will be number of lines left to draw.
you can't use getLineBounds, using the above functions you could calculate the position of the remaining lines to draw.
*Estimated since formatting of text could change the line height, but since there is no text in these lines yet that shouldnt be an issue. But for that same reason you should only draw the remaining lines, and not use this to draw all the lines.
上述 XML 与 Max4ever 的回答中的代码配合使用:
The above XML works with the code from Max4ever's answer: