Rahul Gupta
Rahul Gupta

Reputation: 5295

How to show minimum 10 lines in an EditTExt by default?

i am trying to add 10 lines in an edittext by default when my app loads. I have defined a fixed height for my edittext.

It only shows one line by default no matter what i do, and more lines are added when i press Enter key. Below is my code. Properties minHeight and minLines does not work

<com.example.EditTextt
                android:id="@+id/editText1"
                android:layout_width="match_parent"
                android:layout_height="600dp"
                android:minLines="10"
                android:background="@android:color/transparent"
                android:fadingEdge="vertical"
                android:gravity="top"
                android:padding="10dp"
                android:scrollbars="vertical"
                android:textSize="22sp" >

                <requestFocus />
            </com.example.EditTextt>

See the image below. The lines appear when i press Enter key again and again. I want this much lines to appear by default like a notepad.

Here is my custom class for my EditText :- EditTextt.Java

package com.example;

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 LineEditText extends EditText {
    private Rect mRect;
    private Paint mPaint;

public LineEditText(Context context, AttributeSet attrs) {
    super(context, attrs);

    mRect = new Rect();
    mPaint = new Paint();
    mPaint.setStyle(Paint.Style.FILL);
    mPaint.setColor(getResources().getColor(R.color.Exzeoblue)); //SET YOUR OWN COLOR HERE
}

@Override
protected void onDraw(Canvas canvas) {

    // Gets the number of lines of text in the View.
    int count = getLineCount();

    // Gets the global Rectangle 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);
        baseline += getLineHeight();//next line
    }

    // Finishes up by calling the parent method
    super.onDraw(canvas);
}
}

Now this code draws only one line at a time. I am unable to draw 10 lines by default enter image description here

Upvotes: 3

Views: 3758

Answers (3)

Rahul Gupta
Rahul Gupta

Reputation: 5295

See the image below, The cursor is at the red arrow enter image description here

   package com.example.customedittext;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.EditText;

public class LineEditText extends EditText {
    private Rect mRect;
    private Paint mPaint;

    int initialCount = 0;

    public LineEditText(Context context, AttributeSet attrs) {
        super(context, attrs);

        mRect = new Rect();
        mPaint = new Paint();
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setColor(Color.BLUE);
        initialCount = getMinLines();
        setLines(initialCount);

    }

    @Override
    protected void onDraw(Canvas canvas) {

        // Gets the number of lines of text in the View.
        int count = getBaseline();
        // Gets the global Rectangle and Paint objects
        Rect r = mRect;
        Paint paint = mPaint;
        // Gets the baseline coordinates for the current line of text
        int baseline = getLineBounds(0, r);
        // Draws one line in the rectangle for every line of text in the EditText
        for (int i = 0; i < count; i++) {
            /*
             * 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);
            baseline += getLineHeight();//next line
        }

        // Finishes up by calling the parent method
        super.onDraw(canvas);
    }
}


<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="500dp" 
    android:background="@android:color/holo_blue_light">

    <com.example.customedittext.LineEditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:scrollbars="vertical"
        android:background="@android:color/transparent"
        android:ems="10"
        android:gravity="top"
        android:minLines="7" >

        <requestFocus />
    </com.example.customedittext.LineEditText>
</ScrollView>

Upvotes: 0

Techfist
Techfist

Reputation: 4344

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.EditText;

public class LineEditText extends EditText {
    private Rect mRect;
    private Paint mPaint;

    int initialCount = 0;

    public LineEditText(Context context, AttributeSet attrs) {
        super(context, attrs);

        mRect = new Rect();
        mPaint = new Paint();
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setColor(Color.BLUE);
        initialCount = getMinLines();
        setLines(initialCount);

    }

    @Override
    protected void onDraw(Canvas canvas) {

        // Gets the number of lines of text in the View.
        int count = getBaseline();
        // Gets the global Rectangle and Paint objects
        Rect r = mRect;
        Paint paint = mPaint;
        // Gets the baseline coordinates for the current line of text
        int baseline = getLineBounds(0, r);
        // Draws one line in the rectangle for every line of text in the EditText
        for (int i = 0; i < count; i++) {
            /*
             * 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);
            baseline += getLineHeight();//next line
        }

        // Finishes up by calling the parent method
        super.onDraw(canvas);
    }
}

Upvotes: 1

jyomin
jyomin

Reputation: 1967

I used this code

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    android:layout_height="match_parent"
   >

    <EditText
        android:id="@+id/edit_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"        
        android:text="1\n2\n3\n4\n5\n\6\n\7\n8\n9\n10"
        android:minLines="10" >

    </EditText>


</LinearLayout>

enter image description here

Upvotes: 1

Related Questions