Wie reduziere EditTextich die Hinweisgröße?
Wie reduziere EditTextich die Hinweisgröße?
Antworten:
Sie können dies tun, indem Sie eine Größe in der Zeichenfolgenressource festlegen.
Zum Beispiel:
<string name="edittext_hint"><font size="15">Hint here!</font></string>
dann schreibe einfach in dein XML
android:hint="@string/edittext_hint"
Dies führt zu einem kleineren Text für den Hinweis, aber der Originalgröße für den Eingabetext.
Hoffentlich hilft dies zukünftigen Lesern
spDimension für das sizeAttribut an?
Sie können die Schriftgröße auf dem EditText- reduzieren, wodurch sich auch die Schriftgröße verringert hint. dhandroid:textSize="16sp"
Ich musste dies auch tun, da mein Hinweis nicht in der Standardgröße in den EditText passte. Also habe ich das gemacht (in der XML-Datei textSize auf mHintTextSize setzen):
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, können Sie einfach editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mRealTextSize);sofort anrufen . Die Lösung von longhairedsi könnte jedoch zukunftssicherer sein. Ich bin gespannt, ob dieses Problem in neueren SDK-Versionen behoben wird.
Sie können einfache HTML-Attribute für die Hinweiszeichenfolge selbst festlegen.
Siehe akzeptierte Antwort hier: Android EditText Hinweis
EDIT: habe gerade selbst damit gespielt, das hat bei mir funktioniert:
view.setHint(Html.fromHtml("<small><small><small>" +
getString(R.string.hint) + "</small></small></small>"));
Dies ist eine Liste von Tags, die von HTML akzeptiert werden: http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html (obwohl es bei mir nicht funktioniert hat)
Wenn Sie es programmgesteuert tun möchten,
SpannableString span = new SpannableString(strHint);
span.setSpan(new RelativeSizeSpan(0.5f), 0, strHint.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setHint(span);
@marmors Ansatz ist der beste. Sie können die Anzahl der <small> --- </small>Tags ändern , um die Größe anzupassen.
Sie können den Text von Hint auch direkt wie ich definieren
view.setHint(Html.fromHtml("<small><small><small>" +
"This is Hint" + "</small></small></small>"));
Hoffe das wird helfen.
Die Lösung von @ user2982553 funktioniert hervorragend für mich. Sie können auch verwenden AbsoluteSizeSpan, mit dem Sie die genaue Schriftgröße des Hinweises festlegen können. Verwenden Sie kein <font size=\"5\">Tag, da das sizeAttribut einfach ignoriert wird.
Definieren Sie dies in Ihrer Datei strings.xml im Werteordner:
<string name="enter_otp"><font size="16">your text</font></string>
Ich muss eine größere Größe für echten Text als Hinweis festlegen.
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;
}
}
Sie können nicht nur die Größe eines Hinweises ändern, sondern auch dessen Schriftart und Stil. Ich habe es geschafft, es mit SpannableStringund zu lösenMetricAffectingSpan
1) Erstellen Sie ein benutzerdefiniertes HintObjekt:
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) Erstellen Sie ein benutzerdefiniertes MetricAffectingSpanObjekt:
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) Verwenden Sie:
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);
Die Verwendung des Listeners onFocusChanged () zum Ändern der Schriftgröße für Hinweise ist ebenfalls eine Option, da addTextChangeListener () nicht ausgelöst wird, wenn der Benutzer auf ein Textfeld klickt und der blinkende Cursor die Größe der Hinweisschrift ändert.
Im Gegensatz zu TextChangeListener muss die Schriftgröße für den anfänglichen Hinweis nicht separat festgelegt werden.
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)
}
}
}
}