Думаю, нет необходимости изменять размер подсказки. почему ты хочешь это сделать?
Praveen
4
Подсказка Размер шрифта очень большой .. Так что мне нужно уменьшить его на 2sp ..
Sasikumar
1
У меня такая же проблема. Мы реализуем приложение для набора номера, поэтому набираемые номера могут быть довольно большими, а текст подсказки должен быть меньше, чтобы соответствовать всему. Спасибо @Jeka за решение!
Bradford2000,
1
<string name = "name"> <font size = "20"> Имя </font> <small> (согласно документу) </small> </string>
Санкет Парчанд,
Ответы:
129
Вы можете сделать это, установив размер в строке ресурса.
Поскольку вы не указываете здесь размер, например sp, не будет ли проблема в другом размере экрана? Я не нахожу способов установить размер подсказки через XML-макет, не вызывая проблем при изменении размеров
Вишванат Говда k
2
Это не работает, если подсказка задана программно
ашвин махаджан
60
Вы можете уменьшить размер шрифта на EditText-, что также уменьшит размер hint. т.е.android:textSize="16sp"
Что, если мне нужны два разных размера: один для реального текста, а другой для подсказки?
f_ficarola 05
Круто, это был довольно умный ответ, но приведенный выше комментарий верен. Что, если мне нужны два разных размера: один для реального текста, а другой для подсказки?
Арслан Али Аван
36
Мне также пришлось сделать это, поскольку моя подсказка не помещалась в 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 hinteditText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mHintTextSize);
} else {
editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mRealTextSize);
}
}
});
@EVSearchTerm - это его ссылка для редактирования текста. отказ от соглашения об именах.
Рохит Шарма
1
Такой подход работает. Проблема Android SDK заключается в том, что программная установка размера текста полностью игнорируется для размера текста подсказки. С другой стороны, это позволяет упростить подход longhairedsi. Вместо добавления TextWatcherвы можете просто позвонить editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mRealTextSize);немедленно. Однако решение longhairedsi может быть более безопасным в будущем. Мне любопытно, будет ли эта проблема исправлена в новых версиях SDK.
Peter F
Благодарю. Не забудьте установить начальный размер текста (иначе, когда после запуска текст будет пустым, размер подсказки может быть равен размеру текста).
CoolMind
31
Вы можете установить простые атрибуты HTML для самой строки подсказки.
Решение @ user2982553 отлично подходит для меня. Вы также можете использовать AbsoluteSizeSpan, с помощью которого вы можете установить точный размер шрифта подсказки. Не используйте <font size=\"5\">тег, потому что sizeатрибут просто игнорируется.
Вы можете изменить не только размер подсказки, но также ее шрифт и стиль. Мне удалось решить эту проблему, используя SpannableStringиMetricAffectingSpan
Использование прослушивателя onFocusChanged () для изменения размера шрифта подсказки также является вариантом, поскольку addTextChangeListener () не срабатывает, когда пользователь нажимает на текстовое поле, а размер мигающего курсора изменится на шрифт подсказки.
Кроме того, в отличие от TextChangeListener, нет необходимости отдельно устанавливать начальный размер шрифта подсказки.
Ответы:
Вы можете сделать это, установив размер в строке ресурса.
Например:
<string name="edittext_hint"><font size="15">Hint here!</font></string>
тогда в вашем XML просто напишите
android:hint="@string/edittext_hint"
Это приведет к уменьшению текста для подсказки, но к исходному размеру входного текста.
Надеюсь, это поможет будущим читателям
источник
sp
размерsize
атрибута?Вы можете уменьшить размер шрифта на
EditText
-, что также уменьшит размерhint
. т.е.android:textSize="16sp"
источник
Мне также пришлось сделать это, поскольку моя подсказка не помещалась в 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); } } });
источник
TextWatcher
вы можете просто позвонитьeditText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mRealTextSize);
немедленно. Однако решение longhairedsi может быть более безопасным в будущем. Мне любопытно, будет ли эта проблема исправлена в новых версиях SDK.Вы можете установить простые атрибуты HTML для самой строки подсказки.
См. Принятый ответ здесь: Подсказка Android EditText
РЕДАКТИРОВАТЬ: просто играл с ним сам, это сработало для меня:
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 (хотя у меня это не сработало)
источник
Если вы хотите сделать это программно,
SpannableString span = new SpannableString(strHint); span.setSpan(new RelativeSizeSpan(0.5f), 0, strHint.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); editText.setHint(span);
источник
легко уменьшить размер подсказки редактируемого текста
editText.setHint(Html.fromHtml( "<font size=\"5\">" + "hinttext1" + "</font>" + "<small>" + "hinttext2" + "</small>" ));
источник
Подход @marmor - лучший. Вы можете изменить количество
<small> --- </small>
тегов, чтобы настроить размер.Вы также можете определить текст подсказки напрямую, как это сделал я
view.setHint(Html.fromHtml("<small><small><small>" + "This is Hint" + "</small></small></small>"));
Надеюсь, это поможет.
источник
Решение @ user2982553 отлично подходит для меня. Вы также можете использовать
AbsoluteSizeSpan
, с помощью которого вы можете установить точный размер шрифта подсказки. Не используйте<font size=\"5\">
тег, потому чтоsize
атрибут просто игнорируется.источник
определите это в вашем strings.xml в папке значений:
<string name="enter_otp"><font size="16">your text</font></string>
источник
Мне нужно установить для реального текста больший размер, чем подсказка.
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; } }
источник
Вы можете изменить не только размер подсказки, но также ее шрифт и стиль. Мне удалось решить эту проблему, используя
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);
источник
Использование прослушивателя 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) } } } }
источник