Настройка шрифта подсказки в TextEdit

Можно ли установить шрифт элемента подсказки в виде EditText без изменения шрифта самого EditText? Спасибо.

Ответ 1

Кажется, что нет никакого способа контролировать шрифт подсказки и шрифта текста отдельно.

Ответ 2

Вы проверили android:typeface?

Это отлично работает как для подсказки, так и для текста EditText.

Ответ 3

Не знаю, нужно ли просто им быть другим, или если вы хотите специально установить шрифт.

Если вам просто нужно стилизовать свою подсказку иначе, чем текст, вот как вы можете это сделать в Java на основе каждого поля

  • Оберните текст подсказки в тегах стиля HTML
  • Передайте отмеченную строку в Html.fromHtml(String htmlString)
  • Передайте результат fromHtml() в setHint();

    myField.setHint(Html.fromHtml("<i>" + hint + "</i>"));
    

Ответ 4

Вы можете установить шрифт подсказки с помощью переопределения typefacefont

public class CustomEditText extends EditText {

private Context context;
private AttributeSet attrs;
private int defStyle;

public CustomEditText(Context context) {
    super(context);
    this.context = context;
    init();
}

public CustomEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    this.attrs = attrs;
    init();
}

public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.context = context;
    this.attrs = attrs;
    this.defStyle = defStyle;
    init();
}

private void init() {
    Typeface font = Typeface.createFromAsset(getContext().getAssets(), "opensansbold.ttf");
    this.setTypeface(font);
}

@Override
public void setTypeface(Typeface tf, int style) {
    tf = Typeface.createFromAsset(getContext().getAssets(), "opensansbold.ttf");
    super.setTypeface(tf, style);
}
}

Ответ 5

чтобы иметь конкретный шрифт, есть большая библиотека здесь, это очень просто, но иметь edittext с android: inputType = "textPassword" вы должны сделать немного больше, так что вот оно:

  • удалить андроид: inputType = "textPassword" из xml
  • примените шрифт, используя эту library
  • установить пароль в виде кода:

    password.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); password.setTransformationMethod(PasswordTransformationMethod.getInstance());

Ответ 6

лучший способ справиться с этой проблемой - добавить TextWatcher в свой EditText и динамически изменить шрифт, если в EditText нет ввода

Ответ 7

Вам не нужно ничего делать. Просто установите шрифт в EditText, и это также автоматически изменит шрифт подсказки.

Вот пользовательский шрифт и как его установить:

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/gobold_uplow.ttf");

Edittext mEmailEntry = (EditText) findViewById(R.id.entry_email);
mEmailEntry.setTypeface(typeface);

Ответ 8

mEmailView.setTypeface(Typeface.createFromAsset(getAssets(),
    getString(R.string.app_font)));

((TextInputLayout) findViewById(R.id.tilEmail)).setTypeface(Typeface.createFromAsset(
     getAssets(), getString(R.string.app_font)));

Ответ 9

Вы должны создать CustomTypefaceSpan, чтобы иметь разные шрифты для подсказок и EditText.

Typeface hintTypeface = Typeface.createFromAsset(getAssets(), "AguafinaScript-Regular.ttf");
TypefaceSpan typefaceSpan = new CustomTypefaceSpan(hintTypeface);
SpannableString spannableString = new SpannableString("some hint text");
spannableString.setSpan(typefaceSpan, 0, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
editText.setHint(spannableString);


public class CustomTypefaceSpan extends TypefaceSpan
{
    private final Typeface mNewType;

    public CustomTypefaceSpan(Typeface type)
    {
        super("");
        mNewType = type;
    }

    public CustomTypefaceSpan(String family, Typeface type)
    {
        super(family);
        mNewType = type;
    }

    @Override
    public void updateDrawState(TextPaint ds)
    {
        applyCustomTypeFace(ds, mNewType);
    }

    @Override
    public void updateMeasureState(TextPaint paint)
    {
        applyCustomTypeFace(paint, mNewType);
    }

    private static void applyCustomTypeFace(Paint paint, Typeface tf)
    {
        int oldStyle;
        Typeface old = paint.getTypeface();
        if (old == null)
        {
            oldStyle = 0;
        }
        else
        {
            oldStyle = old.getStyle();
        }

        int fake = oldStyle & ~tf.getStyle();
        if ((fake & Typeface.BOLD) != 0)
        {
            paint.setFakeBoldText(true);
        }

        if ((fake & Typeface.ITALIC) != 0)
        {
            paint.setTextSkewX(-0.25f);
        }

        paint.setTypeface(tf);
    }
}

Ответ 10

editText.setTypeface(Typeface.SERIF);