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.
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"
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 hinteditText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mHintTextSize);
} else {
editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mRealTextSize);
}
}
});
@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.
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.
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:
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.
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
quelle
sp
Dimension für dassize
Attribut an?Sie können die Schriftgröße auf dem
EditText
- reduzieren, wodurch sich auch die Schriftgröße verringerthint
. dhandroid:textSize="16sp"
quelle
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); } } });
quelle
TextWatcher
, können Sie einfacheditText.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)
quelle
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);
quelle
Es ist einfach, die Hinweisgröße des Edittextes zu reduzieren
editText.setHint(Html.fromHtml( "<font size=\"5\">" + "hinttext1" + "</font>" + "<small>" + "hinttext2" + "</small>" ));
quelle
@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.
quelle
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 dassize
Attribut einfach ignoriert wird.quelle
Definieren Sie dies in Ihrer Datei strings.xml im Werteordner:
<string name="enter_otp"><font size="16">your text</font></string>
quelle
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; } }
quelle
Sie können nicht nur die Größe eines Hinweises ändern, sondern auch dessen Schriftart und Stil. Ich habe es geschafft, es mit
SpannableString
und zu lösenMetricAffectingSpan
1) Erstellen Sie ein benutzerdefiniertes
Hint
Objekt: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
MetricAffectingSpan
Objekt: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);
quelle
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) } } } }
quelle