How to reduce EditText
Hint size?
-
2I think there is a no need for to resize the hint. why do you want to do that? – Praveen Jun 29 '10 at 10:38
-
4Hint Font Size is very big.. So i need to reduce 2sp from it.. – Sasikumar Jun 30 '10 at 05:22
-
1I had the same problem. We're implementing a dialer application so the dialed numbers can be quite large, whereas the hint text needs to be smaller to fit everything. Thanks to @Jeka for the solution! – Bradford2000 Jun 24 '16 at 18:20
-
1Name(As per Doc) – Sanket Parchande Mar 22 '17 at 09:48
13 Answers
You can do it by setting a size in the string recource.
For example:
<string name="edittext_hint"><font size="15">Hint here!</font></string>
then in your XML just write
android:hint="@string/edittext_hint"
This will resault in a smaller text for the hint but the original size for the input text.
Hopes this helps for future readers

- 1,514
- 1
- 10
- 6
-
1
-
1As you are not specifying the dimesion like sp here, would not it be problem in different screen size? I dont find any ways to set hint size through layout xml without causing problem when dimensions change – Vishwanath gowda k Oct 03 '15 at 17:20
-
3
-
@ashwinmahajan https://stackoverflow.com/a/16061380/9427138 this answer will help [hint is set programmatically] – Adarsh Vijayan P Jan 04 '22 at 07:11
You can reduce the font size on the EditText
- that will reduce the size of the hint
as well. i.e. android:textSize="16sp"
-
-
-
46What if I want two different sizes, one for the real text and the other one for the hint? – redcrow Aug 05 '15 at 08:23
-
1Cool that was pretty smart answer but the above comment is correctWhat if I want two different sizes, one for the real text and the other one for the hint? – robinHood013 Jun 11 '16 at 18:12
I also had to do this as my hint didn't fit in the EditText at the standard size. So I did this (in the xml set textSize to mHintTextSize):
MYEditText.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence arg0, int start, int before,
int count) {
if (arg0.length() == 0) {
// No entered text so will show hint
editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mHintTextSize);
} else {
editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mRealTextSize);
}
}
});

- 7,830
- 3
- 37
- 50

- 3,133
- 2
- 28
- 28
-
2@EVSearchTerm is his edittext reference. naming convention forsaken. – Rohit Sharma Nov 17 '14 at 12:47
-
1This approach works. The problem of the Android SDK here is that setting text size programmatically is completely ignored for hint text size. On the other side, this allows longhairedsi's approach to be simplified. Instead of adding a `TextWatcher` you can simply call `editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mRealTextSize);` immediately. However, longhairedsi's solution might be more future safe. I'm curious if this issue will be fixed in newer SDK versions. – Peter F Sep 06 '16 at 14:33
-
Thanks. Don't forget to set initial text size (otherwise when after start a text is empty, hint's size maybe equal to text size). – CoolMind Jul 23 '18 at 12:56
You can set simple HTML attributes to the hint string itself.
See accepted answer here: Android EditText hint
EDIT: just played with it myself, this worked for me:
view.setHint(Html.fromHtml("<small><small><small>" +
getString(R.string.hint) + "</small></small></small>"));
This is a list of tags accepted by fromHtml: http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html (though didn't work for me)
If you want to do it programmatically,
SpannableString span = new SpannableString(strHint);
span.setSpan(new RelativeSizeSpan(0.5f), 0, strHint.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setHint(span);

- 139
- 1
- 3
-
Loved your solution but unfortunately didn't work, loading from resources and setting it dynamically to TextInputLayout – Jamal S Jan 05 '20 at 11:51
define this in your strings.xml in values folder :
<string name="enter_otp"><font size="16">your text</font></string>

- 430
- 3
- 13
@marmor 's Approach is the best One. You can alter the number of <small> --- </small>
tags to adjust size.
You can also define the text of Hint directly as I did
view.setHint(Html.fromHtml("<small><small><small>" +
"This is Hint" + "</small></small></small>"));
Hope this will help.

- 3,743
- 5
- 37
- 62
@user2982553 's solution works great for me. You could also use AbsoluteSizeSpan
, with which you can set the exact font size of the hint. Don't use <font size=\"5\">
tag, 'cause the size
attribute is just ignored.

- 196
- 1
- 7
You just need to use "app:hintTextAppearance="@style/TextInputLayoutHintText"
to your TextInputEditText, where in style keep whatever size you required
e.g.:
<style name="TextInputLayoutHintText"> <item name="android:textSize">@dimen/text_size_7</item> </style>

- 166
- 8
I need to set a larger size for real text than hint.
public static class LargeSizeTextWatcher implements TextWatcher {
private final EditText mEditText;
private final int mOriginalSize;
private final int mLargeSize;
private int mLastLength;
TrackingNumberTextWatcher(EditText editText) {
mEditText = editText;
mOriginalSize = (int) editText.getTextSize();
mLargeSize = editText.getResources().getDimensionPixelSize(R.dimen.text_size_large);
mLastLength = editText.length();
if (mLastLength != 0) {
mEditText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mLargeSize);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
int length = s.length();
if (length == 0) {
mEditText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mOriginalSize);
} else if (mLastLength == 0) {
mEditText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mLargeSize);
}
mLastLength = length;
}
}

- 6,374
- 1
- 17
- 11
You can change not only a hint's size but also its font and style. I achieved to solve it using SpannableString
and MetricAffectingSpan
1) Create a custom Hint
object:
import android.graphics.Typeface;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.MetricAffectingSpan;
public class CustomHint extends SpannableString
{
public CustomHint(final CharSequence source, final int style)
{
this(null, source, style, null);
}
public CustomHint(final CharSequence source, final Float size)
{
this(null, source, size);
}
public CustomHint(final CharSequence source, final int style, final Float size)
{
this(null, source, style, size);
}
public CustomHint(final Typeface typeface, final CharSequence source, final int style)
{
this(typeface, source, style, null);
}
public CustomHint(final Typeface typeface, final CharSequence source, final Float size)
{
this(typeface, source, null, size);
}
public CustomHint(final Typeface typeface, final CharSequence source, final Integer style, final Float size)
{
super(source);
MetricAffectingSpan typefaceSpan = new CustomMetricAffectingSpan(typeface, style, size);
setSpan(typefaceSpan, 0, source.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
2) Create custom MetricAffectingSpan
object:
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.MetricAffectingSpan;
public class CustomMetricAffectingSpan extends MetricAffectingSpan
{
private final Typeface _typeface;
private final Float _newSize;
private final Integer _newStyle;
public CustomMetricAffectingSpan(Float size)
{
this(null, null, size);
}
public CustomMetricAffectingSpan(Float size, Integer style)
{
this(null, style, size);
}
public CustomMetricAffectingSpan(Typeface type, Integer style, Float size)
{
this._typeface = type;
this._newStyle = style;
this._newSize = size;
}
@Override
public void updateDrawState(TextPaint ds)
{
applyNewSize(ds);
}
@Override
public void updateMeasureState(TextPaint paint)
{
applyNewSize(paint);
}
private void applyNewSize(TextPaint paint)
{
if (this._newStyle != null)
paint.setTypeface(Typeface.create(this._typeface, this._newStyle));
else
paint.setTypeface(this._typeface);
if (this._newSize != null)
paint.setTextSize(this._newSize);
}
}
3) Use:
Typeface newTypeface = Typeface.createFromAsset(getAssets(), "AguafinaScript-Regular.ttf");
CustomHint customHint = new CustomHint(newTypeface, "Enter some text", Typeface.BOLD_ITALIC, 60f);
// CustomHint customHint = new CustomHint(newTypeface, "Enter some text", Typeface.BOLD_ITALIC);
// CustomHint customHint = new CustomHint(newTypeface, "Enter some text", 60f);
// CustomHint customHint = new CustomHint("Enter some text", Typeface.BOLD_ITALIC, 60f);
// CustomHint customHint = new CustomHint("Enter some text", Typeface.BOLD_ITALIC);
// CustomHint customHint = new CustomHint("Enter some text", 60f);
customEditText.setHint(customHint);

- 8,334
- 4
- 61
- 56
Using onFocusChanged() listener for changing hint font size is also an option, as addTextChangeListener() won't trigger when user clicks on text field, and blinking cursor will resize to hint font.
Also, unlike with TextChangeListener, there is no need to set initial hint font size separately.
class EditTextWithHintSize {
init {
val typedArray = context.obtainStyledAttributes(attrs,
R.styleable.EditTextWithHintSize, 0, defStyle)
try {
hintFontSize = typedArray.getDimension(R.styleable.EditTextWithHintSize_hint_font_size, textSize)
fontSize = textSize
if (length() == 0) {
setTextSize(TypedValue.COMPLEX_UNIT_PX, hintFontSize)
}
} catch (e: Exception) {
hintFontSize = textSize
fontSize = textSize
} finally {
typedArray.recycle()
}
}
override fun onFocusChanged(focused: Boolean, direction: Int, previouslyFocusedRect: Rect?) {
super.onFocusChanged(focused, direction, previouslyFocusedRect)
if (focused) {
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
} else {
if (length() == 0) {
setTextSize(TypedValue.COMPLEX_UNIT_PX, hintFontSize)
} else {
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
}
}
}
}

- 1,081
- 10
- 25