Android EditText Hint Размер - PullRequest
       18

Android EditText Hint Размер

69 голосов
/ 29 июня 2010

Как уменьшить EditText Размер подсказки?

Ответы [ 11 ]

113 голосов
/ 30 апреля 2015

Вы можете сделать это, установив размер в строковом источнике.

Например:

<string name="edittext_hint"><font size="15">Hint here!</font></string>

тогда в своем XML просто напишите

android:hint="@string/edittext_hint"

Thisбудет повторяться в меньшем тексте для подсказки, но исходный размер для входного текста.

Надеется, что это поможет будущим читателям

55 голосов
/ 25 июня 2011

Вы можете уменьшить размер шрифта на EditText - это также уменьшит размер hint. т.е. android:textSize="16sp"

35 голосов
/ 27 августа 2011

Я также должен был сделать это, поскольку моя подсказка не помещалась в EditText в стандартном размере.Итак, я сделал это (в xml установите textSize в 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);
                    }
                }
        });
31 голосов
/ 30 апреля 2012

Вы можете установить простые атрибуты HTML для самой строки подсказки.

Смотрите принятый ответ здесь: Android EditText hint

РЕДАКТИРОВАТЬ: просто играл с ним сам, это работает для меня:

view.setHint(Html.fromHtml("<small><small><small>" + 
             getString(R.string.hint) + "</small></small></small>"));

Это список тегов, принятых fromHtml: http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html (хотя у меня не сработало)

9 голосов
/ 12 ноября 2013

Если вы хотите сделать это программно,

SpannableString span = new SpannableString(strHint);
span.setSpan(new RelativeSizeSpan(0.5f), 0, strHint.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setHint(span);
8 голосов
/ 17 апреля 2013

легко уменьшить размер подсказки для текста редактирования

editText.setHint(Html.fromHtml(
    "<font size=\"5\">" + "hinttext1" + "</font>" + 
    "<small>" + "hinttext2" + "</small>" )); 
1 голос
/ 16 января 2014
Решение

@ user2982553 прекрасно работает для меня.Вы также можете использовать AbsoluteSizeSpan, с помощью которого вы можете установить точный размер шрифта подсказки.Не используйте тег <font size=\"5\">, потому что атрибут size просто игнорируется.

1 голос
/ 04 ноября 2013

@ Marmor 's подход лучший.Вы можете изменить количество <small> --- </small> тегов, чтобы настроить размер.

Вы также можете определить текст подсказки напрямую, как я это сделал

view.setHint(Html.fromHtml("<small><small><small>" + "This is Hint" + "</small></small></small>"));

Надеюсь, что это будетпомощь.

0 голосов
/ 25 июня 2019

Использование onFocusChanged () слушателя для изменения размера шрифта подсказки также является опцией, так как addTextChangeListener () не сработает, когда пользователь нажимает на текстовое поле, а мигающий курсор изменит размер шрифта подсказки.

Кроме того, в отличие от TextChangeListener, нет необходимости устанавливать начальный размер шрифта подсказки отдельно.

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)
            }
        }
    }
}
0 голосов
/ 02 августа 2017

Вы можете изменить не только размер подсказки, но также ее шрифт и стиль.Я решил ее решить, используя SpannableString и MetricAffectingSpan

1) Создать пользовательский объект Hint:

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) Создатьпользовательский MetricAffectingSpan объект:

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) Использование:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...