Você pode fazer contagem de caracteres a partir do próprio xml usando o wrapper TextInputLayout para EditText introduzido no SupportLibrary v23.1
Basta envolver seu EditText com um TextInputLayout e definir CounterEnabled como true e definir um 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>
Você obterá um efeito material como este
Você pode usar counterOverflowTextAppearance , counterTextAppearance para definir o estilo do contador.
EDITAR
Da documentação do Android.
A classe TextInputEditText é fornecida para ser usada como filho desse layout. O uso de TextInputEditText permite a TextInputLayout maior controle sobre os aspectos visuais de qualquer entrada de texto. Um exemplo de uso é assim:
<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