Cómo agregar pagelines a un EditText en android?

¿Es posible mostrar pagelines en un EditText ?

Me refiero a estas líneas:

introduzca la descripción de la imagen aquí

Digamos que mi EditText es de 500 por 500 píxeles de tamaño. Quiero que esas líneas sean visibles a través de ese 500 por 500 cuadrados.

¿Hay una forma de construir esto? Ya intenté Google pero no pude encontrar una respuesta. Supongo que mi otra opción es crear dinámicamente un gráfico basado en textheight y linespacing, un trabajo feo.

La muestra de aplicación de bloc de notas del sitio de desarrollo de Android muestra cómo hacer esto.

http://developer.android.com/resources/samples/NotePad/index.html

Parece esto (desplácese hacia abajo para el código):

Bloc

La mayor parte del código relevante está en este archivo . Preste atención a la clase interna LinedEditText . Se define dentro de la actividad. Dibuja las líneas requeridas.

Dentro del método onCreate() la actividad, setContentView(R.id.note_editor) se establece como la vista, se define como aquí

Snippet extraído de aquí . Actualización : Código modificado por @ Pieter888 para dibujar líneas en todo el control EditText .

 import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.widget.EditText; public class LinedEditText extends EditText { private Rect mRect; private Paint mPaint; public LinedEditText(Context context, AttributeSet attrs) { super(context, attrs); mRect = new Rect(); mPaint = new Paint(); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(0xFF000000); } /** * This is called to draw the LinedEditText object * @param canvas The canvas on which the background is drawn. */ @Override protected void onDraw(Canvas canvas) { int height = canvas.getHeight(); int curHeight = 0; Rect r = mRect; Paint paint = mPaint; int baseline = getLineBounds(0, r); for (curHeight = baseline + 1; curHeight < height; curHeight += getLineHeight()) { canvas.drawLine(r.left, curHeight, r.right, curHeight, paint); } super.onDraw(canvas); } } 

La respuesta de @ gideon arriba funciona bien pero tiene un problema cuando se introduce más texto en el edittext porque más líneas no se dibujan en consecuencia. Para solucionar esto, escribí un override para onMeasure() y llamado invalidate() . y se dibujarán más líneas cuando el texto aumente.

  @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec,heightMeasureSpec); invalidate(); } 

El código ahora es:

 import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.widget.EditText; public class LinedEditText extends EditText { private Rect mRect; private Paint mPaint; public LinedEditText(Context context, AttributeSet attrs) { super(context, attrs); mRect = new Rect(); mPaint = new Paint(); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(0xFF000000); } /** * This is called to draw the LinedEditText object * @param canvas The canvas on which the background is drawn. */ @Override protected void onDraw(Canvas canvas) { int height = canvas.getHeight(); int curHeight = 0; Rect r = mRect; Paint paint = mPaint; int baseline = getLineBounds(0, r); for (curHeight = baseline + 1; curHeight < height; curHeight += getLineHeight()) { canvas.drawLine(r.left, curHeight, r.right, curHeight, paint); } super.onDraw(canvas); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec,heightMeasureSpec); invalidate(); } } 
  • TextViews con divisores entre ellos
  • Cómo desactivar las fechas anteriores a la fecha de hoy en DatePickerDialog Android?
  • Configuración del diseño de preferencias y cambio del atributo en él
  • Cómo ocultar la barra de título a través del código en android
  • No quitar el relleno alrededor del texto del botón
  • ¿Por qué la vista previa de Mi cámara muestra Horizontal en lugar de Vertical?
  • Cómo borrar todas las filas de un TableLayout?
  • Android - Hashtag en TextView
  • Tabs Deslizar dirección en la aplicación de Android de derecha a izquierda
  • ¿Cómo obtener la altura y el ancho del dispositivo en Runtime?
  • ¿Cómo puedo crear dinámicamente una lista de todos los componentes de Android ui mediante programación? Por ejemplo, TextView, ImageView, etc
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.