Intereting Posts
Пользовательское listview для AlertDialog Как я могу использовать шрифт bangla как строковое значение в android Как получить местоположение из Карты Google после удаления Pin над ним Экстремальное отставание камеры на Nexus 4 Нужно создать Footer для Gridview в Android Андроид N, неспособный скомпилировать в биллинге приложений AIDL Клавиатура Android скрывает себя, показывая пустое место внизу, после возвращения из заставки Пользовательский параметр DatePicker as Preference не сохраняет значение, когда пользователь редактирует значение в поле Динамическая высота расширенного динамического интерфейса Android Разница между методами масштабирования растрового изображения Почему мои определения определения огурца не определены в Android Studio Как добавить проект библиотеки в проект Android? Как переопределить метод getItemId (int pos) из CursorAdapter? Android – добавление и отображение элементов в ListView по одному с помощью ArrayAdapter Java.lang.RuntimeException: невозможно возобновить работу с помощью java.lang.IllegalArgumentException

Как добавить pagelines в EditText в android?

Можно ли показывать pagelines в EditText ?

Я имею в виду следующие строки:

Введите описание изображения здесь

Скажем, мой EditText имеет размер 500 на 500 пикселей. Я хочу, чтобы эти линии были видны на 500 500 квадратных.

Есть ли способ сделать это? Я уже пробовал Google, но я не мог найти ответа. Я предполагаю, что мой другой вариант – динамически создавать графику на основе textheight и linespacing, такой уродливой работы.

Пример приложения к блокноту с сайта разработчика Android показывает, как это сделать.

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

Похоже на это (прокрутите вниз для кода):

Блокнот

Большая часть соответствующего кода находится в этом файле . Обратите внимание на внутренний класс LinedEditText . Он определяется внутри действия. Он рисует необходимые строки.

Внутри действия onCreate() метод setContentView(R.id.note_editor) задается как вид, он определен как здесь

Фрагмент извлечен отсюда . Обновление : код, измененный @ Pieter888, для рисования строк во всем элементе управления 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); } } 

Ответ @ gideon выше работает хорошо, но имеет проблему, когда вы вводите больше текста в edittext потому что больше строк не рисуется соответственно. Чтобы решить эту проблему, я написал переопределение для onMeasure() и вызвал invalidate() . И при увеличении текста будет нарисовано больше строк.

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

Код теперь:

 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(); } }