5
votes

I have this EditText with a limit of 150 characters:

 <EditText
    android:id="@+id/editText1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#fff"
    android:layout_marginBottom="50dp"
    android:padding="30dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:maxLength="150"
    android:gravity="top|left"
    android:lineSpacingMultiplier="1.8"
    android:inputType="textMultiLine|textCapSentences" >
</EditText>

TextView:

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="100dp"
 />

NewActivity:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;


public class NewActivity extends Activity {




private TextView textView1;
private EditText editText1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_text);


    final ImageButton a = (ImageButton) findViewById(R.id.imageBack);
    a.setOnClickListener(new OnClickListener()  {

        @Override
        public void onClick(View arg0) {
            Animation anim =              AnimationUtils.loadAnimation(NewActivity.this, R.anim.animation);
            a.startAnimation(anim);

            Intent intent = new Intent(NewActivity.this,MainActivity.class);
            startActivity(intent);

            editText1.addTextChangedListener(new TextWatcher()
            {
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count)
                {
                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int aft)                                                                           
                {
                }

                @Override
                public void afterTextChanged(Editable s)
                {
                   // this will show characters remaining
                    textView1.setText(150 - s.toString().length() + "/150");
                }
            });


        }
    });




}}

I want to create a small box in the top right corner of the page where you can see how many characters there is left, for example 132/150, i have tried looking at others solutions here on stackoverflow but i couldnt get them to work.

4
For best UX, you shouldn't set maximum length of text while user is editing it, because posting can become inconvent. Give the user possibility to write as long as he wants, then, if he wrote more than allowed, he should edit the post into more compact. Twitter as a reference.Alex Salauyou

4 Answers

11
votes

You can do this

mEditText.addTextChangedListener(new TextWatcher()
{
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count)
    {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int aft                                                                           
    {
    }

    @Override
    public void afterTextChanged(Editable s)
    {
       // this will show characters remaining
        countTextView.setText(150 - s.toString().length() + "/150");
    }
});
1
votes

You can use a TextWatcher to see when the text has changed

private TextView mTextView;
private EditText mEditText;
private final TextWatcher mTextEditorWatcher = new TextWatcher() {
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        public void onTextChanged(CharSequence s, int start, int before, int count) {
           //This sets a textview to the current length
           mTextView.setText(String.valueOf(s.length()));
        }

        public void afterTextChanged(Editable s) {
        }
};

You can set the TextWatcher for the edittext with

mEditText.addTextChangedListener(mTextEditorWatcher);
1
votes

Programatically do it like..

editText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            int length = s.length();
            // set this length/maxlength to the textview at the top left
            // corner
            textView.setText(""+length+ "/" +max);//which is placed at the top right corner
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });
0
votes
  1. Keep a TextWatcher and track the length of entered text.
  2. Do MAX_LENGTH - yourTextwatcherString.length;
  3. Keep updating the view on the RHS top based on a timer/ or on even key press, your wish (there are several ways to do that). Check, whether old length and new length are not the same before updating the view.