Динамически изменить размер шрифта textview - PullRequest
4 голосов
/ 12 декабря 2011

Можно ли динамически изменять размер шрифтов в текстовом представлении в соответствии с разрешением экрана? Если да, то как? Я разрабатываю из MDP AVD. Но когда приложение установлено на hdpi, текст кажется слишком маленьким.

1 Ответ

3 голосов
/ 12 декабря 2011

Используйте textSize , а единица измерения sp пикселей - это то, что подразумевает alextsc.

Если вы действительно хотите быть dynmic и сделать свой шрифт как можно большего размера, чтобы заполнить ширину, тос помощью textWatcher можно визуализировать текст и проверить размер, а затем настроить шрифты на лету.

Следующее довольно специфично, так как у меня несколько представлений текста в линейном макете, и это только изменяет размер текстаменьше, когда текст в одном из них не поместится.Это даст вам кое-что для работы.

class LineTextWatcher implements TextWatcher {

static final String TAG = "IpBike";
TextView mTV;
Paint mPaint;

public LineTextWatcher(TextView text) {
    mTV = text;
    mPaint = new Paint();
}

public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
}

public void onTextChanged(CharSequence s, int start, int before, int count) {
}

public void afterTextChanged(Editable s) {
    // do the work here.
    // we are looking for the text not fitting.
    ViewParent vp = mTV.getParent();
    if ((vp != null) && (vp instanceof LinearLayout)) {
        LinearLayout parent = (LinearLayout) vp;
        if (parent.getVisibility() == View.VISIBLE) {
            mPaint.setTextSize(mTV.getTextSize());
            final float size = mPaint.measureText(s.toString());
            if ((int) size > mTV.getWidth()) {
                float ts = mTV.getTextSize();
                Log.w(TAG, "Text ellipsized TextSize was: " + ts);
                for (int i = 0; i < parent.getChildCount(); i++) {
                    View child = parent.getChildAt(i);
                    if ((child != null) && (child instanceof TextView)) {
                        TextView tv = (TextView) child;
                        // first off we want to keep the verticle
                        // height.
                        tv.setHeight(tv.getHeight()); // freeze the
                                                      // height.

                        tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,
                                tv.getTextSize() - 1);
                    } else {
                        Log.v(TAG, "afterTextChanged Child not textView");
                    }
                }
            }
        }
    } else {
        Log.v(TAG, "afterTextChanged parent not LinearLayout");
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...