Live character count in notepad EditText android

505 views Asked by At

I have a custom EditText which look like notepad . In that I need to show the Live character count Can anybody help me to get started.

LineEditText.java

public class LinedEditText extends EditText {
    private Rect mRect;
    private Paint mPaint;
    int initialCount=10
    @SuppressLint("NewApi")
    public LinedEditText(Context context, AttributeSet attrs) {
        super(context, attrs);

    mRect = new Rect();
    mPaint = new Paint();
    mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
    mPaint.setColor(Color.parseColor("#C0C0C0")); //SET YOUR OWN COLOR HERE
   /*initialCount=getMinLines();
    setLines(initialCount);*/
}

@Override
protected void onDraw(Canvas canvas) {
    //int count = getLineCount();

    int height = getHeight();
    int line_height = getLineHeight();

    int count = height / line_height;

    if (getLineCount() > count)
        count = getLineCount();//for long text with scrolling

    Rect r = mRect;
    Paint paint = mPaint;
    int baseline = getLineBounds(0, r);//first line

    for (int i = 0; i < count; i++) {

        canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint);
        baseline += getLineHeight();//next line
    }

    super.onDraw(canvas);
}

}

xml layout

<com.rb.lined.edittext.LinedEditText
                android:id="@+id/edit_story"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"                
                android:background="@null"
                android:inputType="textMultiLine|textNoSuggestions"
                android:minLines="5"
                android:singleLine="false"
                android:imeOptions="actionNone"
                android:text="" 
                android:textSize="13sp"
                android:gravity="top|left"
                android:layout_below="@+id/txt_story"
                app:typeface="roboto_condensed"
                android:maxLength="180"/>
2

There are 2 answers

0
cgew85 On

You can use a TextWatcher object on your EditText. It's assigned like a value change listener.

Android Developer - TextView @ addTextChangedListener

Android Developer - TextWatcher

1
MineConsulting SRL On

Since you are using a custom view it's easier onDraw will be called multiple times you just have to draw the characters count. Do something like:

canvas.drawText (getText().toString().length(), positionx, positiony, textPaint);

Edit

x,y will be the origin of yout text so if you do:

Paint myPaint = new Paint();
myPaint.setColor(Color.WHITE);
myPaint.setTextAlign(Paint.Align.CENTER);

positionx = getWidth()/2;
positiony = getHeight()/2;

canvas.drawText (getText().toString().length(), positionx, positiony, textPaint);

This will draw your text exacltly in the center of your view.