Vous pouvez compter les caractères à partir de xml lui-même en utilisant TextInputLayout pour EditText introduit dans SupportLibrary v23.1
Il suffit d'envelopper votre EditText dans un TextInputLayout, de définir CounterEnabled sur true et de définir un counterMaxLength.
<android.support.design.widget.TextInputLayout
android:id="@+id/textContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:counterEnabled="true"
app:counterMaxLength="20"
>
<EditText
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Text Hint"
/>
</android.support.design.widget.TextInputLayout>
Vous obtiendrez un effet matériel comme ce
Vous pouvez utiliser counterOverflowTextAppearance , contreTextApparence pour styliser le compteur.
EDITAR
Extrait de la documentation Android.
En TextInputEditText est fournie pour être utilisée comme enfant de ce modèle. L'utilisation de TextInputEditText permet à TextInputLayout de mieux contrôler les aspects visuels de toute entrée de texte. Un exemple d'utilisation est le suivant :
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/form_username"/>
</android.support.design.widget.TextInputLayout>
TextInputLayout TextInputEditText