Ответ 1
Кажется, что нет никакого способа контролировать шрифт подсказки и шрифта текста отдельно.
Можно ли установить шрифт элемента подсказки в виде EditText без изменения шрифта самого EditText? Спасибо.
Кажется, что нет никакого способа контролировать шрифт подсказки и шрифта текста отдельно.
Вы проверили android:typeface
?
Это отлично работает как для подсказки, так и для текста EditText.
Не знаю, нужно ли просто им быть другим, или если вы хотите специально установить шрифт.
Если вам просто нужно стилизовать свою подсказку иначе, чем текст, вот как вы можете это сделать в Java на основе каждого поля
Передайте результат fromHtml() в setHint();
myField.setHint(Html.fromHtml("<i>" + hint + "</i>"));
Вы можете установить шрифт подсказки с помощью переопределения 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);
}
}
чтобы иметь конкретный шрифт, есть большая библиотека здесь, это очень просто, но иметь edittext с android: inputType = "textPassword" вы должны сделать немного больше, так что вот оно:
установить пароль в виде кода:
password.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); password.setTransformationMethod(PasswordTransformationMethod.getInstance());
лучший способ справиться с этой проблемой - добавить TextWatcher в свой EditText и динамически изменить шрифт, если в EditText нет ввода
Вам не нужно ничего делать. Просто установите шрифт в EditText, и это также автоматически изменит шрифт подсказки.
Вот пользовательский шрифт и как его установить:
Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/gobold_uplow.ttf");
Edittext mEmailEntry = (EditText) findViewById(R.id.entry_email);
mEmailEntry.setTypeface(typeface);
mEmailView.setTypeface(Typeface.createFromAsset(getAssets(),
getString(R.string.app_font)));
((TextInputLayout) findViewById(R.id.tilEmail)).setTypeface(Typeface.createFromAsset(
getAssets(), getString(R.string.app_font)));
Вы должны создать 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);
}
}
editText.setTypeface(Typeface.SERIF);