Android EditText Hinweis Größe

83

Wie reduziere EditTextich die Hinweisgröße?

Sasikumar
quelle
2
Ich denke, es ist nicht nötig, die Größe des Hinweises zu ändern. Warum willst du das machen?
Praveen
4
Hinweis Schriftgröße ist sehr groß .. Also muss ich 2sp davon reduzieren ..
Sasikumar
1
Ich hatte das gleiche Problem. Wir implementieren eine Dialer-Anwendung, damit die gewählten Nummern sehr groß sein können, während der Hinweistext kleiner sein muss, damit er zu allem passt. Danke an @Jeka für die Lösung!
Bradford2000
1
<string name = "name"> <font size = "20"> Name </ font> <small> (gemäß
Dokument

Antworten:

128

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

Jeka
quelle
1
Wie gebe ich die spDimension für das sizeAttribut an?
f_ficarola
1
Wäre es nicht ein Problem bei unterschiedlichen Bildschirmgrößen, da Sie hier nicht die Dimension wie sp angeben? Ich finde keine Möglichkeit, die Größe von Hinweisen über Layout-XML
festzulegen,
2
Dies funktioniert nicht, wenn der Hinweis programmgesteuert gesetzt wird
Ashwin Mahajan
60

Sie können die Schriftgröße auf dem EditText- reduzieren, wodurch sich auch die Schriftgröße verringert hint. dhandroid:textSize="16sp"

inky
quelle
Danke, du hast mir ein paar Kopfschmerzen erspart! :)
Peterkodermac
Froh, dass ich helfen konnte! :)
Inky
Tolle Antwort statt all dieser Work Around: D
Antwan
33
Was ist, wenn ich zwei verschiedene Größen möchte, eine für den echten Text und die andere für den Hinweis?
f_ficarola
Cool, das war eine ziemlich kluge Antwort, aber der obige Kommentar ist richtig. Was ist, wenn ich zwei verschiedene Größen möchte, eine für den echten Text und die andere für den Hinweis?
Arslan Ali Awan
35

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);
                    }
                }
        });
langhaarig
quelle
2
@EVSearchTerm ist seine Edittext-Referenz. Namenskonvention aufgegeben.
Javanator
1
Dieser Ansatz funktioniert. Das Problem des Android SDK besteht darin, dass das programmgesteuerte Festlegen der Textgröße für die Textgröße von Hinweisen vollständig ignoriert wird. Auf der anderen Seite kann so der Ansatz von longhairedsi vereinfacht werden. Anstatt ein hinzuzufügen 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.
Peter F
Vielen Dank. Vergessen Sie nicht, die anfängliche Textgröße festzulegen (andernfalls entspricht die Größe des Hinweises möglicherweise der Textgröße, wenn nach dem Start ein Text leer ist).
CoolMind
31

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)

Marmor
quelle
11

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);
user2982553
quelle
Liebte Ihre Lösung, funktionierte aber leider nicht, lud aus Ressourcen und stellte sie dynamisch auf TextInputLayout
JimmyFlash
9

Es ist einfach, die Hinweisgröße des Edittextes zu reduzieren

editText.setHint(Html.fromHtml(
    "<font size=\"5\">" + "hinttext1" + "</font>" + 
    "<small>" + "hinttext2" + "</small>" )); 
ManiTeja
quelle
2

@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.

dmSherazi
quelle
1

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.

Trojantale
quelle
1

Definieren Sie dies in Ihrer Datei strings.xml im Werteordner:

<string name="enter_otp"><font size="16">your text</font></string>
Mohammad Davari
quelle
0

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;
    }
}
edwardaa
quelle
0

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);
Ayaz Alifov
quelle
0

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)
            }
        }
    }
}
Southton
quelle