Kích thước gợi ý của Android EditText


83

Làm thế nào để giảm EditTextkích thước Gợi ý?


2
Tôi nghĩ rằng không cần phải thay đổi kích thước gợi ý. Tại sao bạn muốn làm điều đó?
Praveen

4
Gợi ý Font Size là rất lớn .. Vì vậy, tôi cần phải giảm 2SP từ nó ..
Sasikumar

1
Tôi đã từng gặp vấn đề tương tự. Chúng tôi đang triển khai một ứng dụng quay số nên các số đã gọi có thể khá lớn, trong khi văn bản gợi ý cần phải nhỏ hơn để phù hợp với mọi thứ. Cảm ơn @Jeka về giải pháp!
Bradford2000

1
<string name = "name"> <font size = "20"> Tên </font> <small> (Theo tài liệu) </small> </string>
Sanket Parchande

Câu trả lời:


128

Bạn có thể làm điều đó bằng cách đặt kích thước trong nguồn cung cấp lại chuỗi.

Ví dụ:

<string name="edittext_hint"><font size="15">Hint here!</font></string>

thì trong XML của bạn chỉ cần viết

android:hint="@string/edittext_hint"

Điều này sẽ kích hoạt lại trong một văn bản nhỏ hơn cho gợi ý nhưng kích thước ban đầu cho văn bản đầu vào.

Hy vọng điều này sẽ giúp ích cho các độc giả trong tương lai


1
Làm cách nào để chỉ định thứ spnguyên cho sizethuộc tính?
f_ficarola

1
Vì bạn không chỉ định dimesion như sp ở đây, nó sẽ không có vấn đề ở kích thước màn hình khác nhau? Tôi không tìm thấy bất kỳ cách để kích thước gợi ý thiết lập thông qua bố cục xml mà không gây ra vấn đề khi thay đổi kích thước
Vishwanath Gowda k

2
Đây không hoạt động khi gợi ý được thiết lập theo chương trình
Ashwin Mahajan

60

Bạn có thể giảm kích thước phông chữ trên EditText- điều đó cũng sẽ giảm kích thước của phông chữ hint. I Eandroid:textSize="16sp"


Cảm ơn bạn, bạn đã cứu tôi một số cơn đau đầu! :)
peterkodermac

Mừng vì tôi có thể giúp! :)
inky

Great câu trả lời thay vì tất cả các công việc này khoảng: D
Antwan

33
Điều gì sẽ xảy ra nếu tôi muốn có hai kích thước khác nhau, một cho văn bản thực và một cho gợi ý?
f_ficarola

Tuyệt vời đó là câu trả lời khá thông minh nhưng nhận xét ở trên là đúng Nếu tôi muốn có hai kích thước khác nhau, một cho văn bản thực và một cho gợi ý?
Arslan Ali Awan

35

Tôi cũng phải làm điều này vì gợi ý của tôi không phù hợp với EditText ở kích thước tiêu chuẩn. Vì vậy, tôi đã làm điều này (trong xml đặt textSize thành 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);
                    }
                }
        });

2
@EVSearchTerm là tham chiếu văn bản chỉnh sửa của anh ấy. quy ước đặt tên từ bỏ.
Javanator

1
Cách tiếp cận này hoạt động. Vấn đề của Android SDK ở đây là việc đặt kích thước văn bản theo chương trình hoàn toàn bị bỏ qua đối với kích thước văn bản gợi ý. Mặt khác, điều này cho phép đơn giản hóa cách tiếp cận của longhairedsi. Thay vì thêm một, TextWatcherbạn có thể chỉ cần gọi editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mRealTextSize);ngay lập tức. Tuy nhiên, giải pháp của longhairedsi có thể an toàn hơn trong tương lai. Tôi tò mò liệu vấn đề này có được khắc phục trong các phiên bản SDK mới hơn không.
Peter F

Cảm ơn. Đừng quên đặt kích thước văn bản ban đầu (nếu không, sau khi bắt đầu một văn bản trống, kích thước của gợi ý có thể bằng kích thước văn bản).
CoolMind,

31

Bạn có thể đặt các thuộc tính HTML đơn giản cho chính chuỗi gợi ý.

Xem câu trả lời được chấp nhận tại đây: Gợi ý Android EditText

CHỈNH SỬA: chỉ tự chơi với nó, điều này đã làm việc cho tôi:

view.setHint(Html.fromHtml("<small><small><small>" + 
             getString(R.string.hint) + "</small></small></small>"));

Đây là danh sách các thẻ được chấp nhận bởi fromHtml: http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html (mặc dù không hoạt động với tôi)


11

Nếu bạn muốn làm điều đó theo chương trình,

SpannableString span = new SpannableString(strHint);
span.setSpan(new RelativeSizeSpan(0.5f), 0, strHint.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setHint(span);

Yêu thích giải pháp của bạn nhưng không may là không hoạt động, tải từ tài nguyên và đặt nó động thành TextInputLayout
JimmyFlash

9

rất dễ dàng để giảm kích thước gợi ý của văn bản chỉnh sửa

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

2

Phương pháp tiếp cận của @marmor là Phương pháp tốt nhất. Bạn có thể thay đổi số lượng<small> --- </small> thẻ để điều chỉnh kích thước.

Bạn cũng có thể xác định văn bản của Gợi ý trực tiếp như tôi đã làm

view.setHint(Html.fromHtml("<small><small><small>" + "This is Hint" + "</small></small></small>"));

Hy vọng điều này sẽ giúp ích.


1

Giải pháp của @ user2982553 phù hợp với tôi. Bạn cũng có thể sử dụng AbsoluteSizeSpan, với đó bạn có thể đặt kích thước phông chữ chính xác của gợi ý. Không sử dụng <font size=\"5\">thẻ, vì sizethuộc tính này chỉ bị bỏ qua.


1

xác định điều này trong thư mục string.xml trong thư mục giá trị:

<string name="enter_otp"><font size="16">your text</font></string>

0

Tôi cần đặt kích thước lớn hơn cho văn bản thực so với gợi ý.

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;
    }
}

0

Bạn có thể thay đổi không chỉ kích thước của gợi ý mà còn cả phông chữ và kiểu của nó. Tôi đã đạt được giải quyết bằng cách sử dụng SpannableStringMetricAffectingSpan

1) Tạo một Hintđối tượng tùy chỉnh :

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) Tạo MetricAffectingSpanđối tượng tùy chỉnh :

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) Sử dụng:

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);

0

Sử dụng trình nghe onFocusChanged () để thay đổi kích thước phông chữ gợi ý cũng là một tùy chọn, vì addTextChangeListener () sẽ không kích hoạt khi người dùng nhấp vào trường văn bản và con trỏ nhấp nháy sẽ thay đổi kích thước thành phông chữ gợi ý.

Ngoài ra, không giống như TextChangeListener, không cần đặt kích thước phông chữ gợi ý ban đầu riêng biệt.

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)
            }
        }
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.