• 在Java代码上设置TextView字体大小


    部分源码:

        /**
         * Set the default text size to a given unit and value.  See {@link
         * TypedValue} for the possible dimension units.
         *
         * @param unit The desired dimension unit.
         * @param size The desired size in the given units.
         *
         * @attr ref android.R.styleable#TextView_textSize
         */
        public void setTextSize(int unit, float size) {
            Context c = getContext();
            Resources r;
    
            if (c == null)
                r = Resources.getSystem();
            else
                r = c.getResources();
    
            setRawTextSize(TypedValue.applyDimension(
                unit, size, r.getDisplayMetrics()));
        }
    
        private void setRawTextSize(float size) {
            if (size != mTextPaint.getTextSize()) {
                mTextPaint.setTextSize(size);
    
                if (mLayout != null) {
                    nullLayouts();
                    requestLayout();
                    invalidate();
                }
            }
        }
    
        /**
         * Converts an unpacked complex data value holding a dimension to its final floating 
         * point value. The two parameters <var>unit</var> and <var>value</var>
         * are as in {@link #TYPE_DIMENSION}.
         *  
         * @param unit The unit to convert from.
         * @param value The value to apply the unit to.
         * @param metrics Current display metrics to use in the conversion -- 
         *                supplies display density and scaling information.
         * 
         * @return The complex floating point value multiplied by the appropriate 
         * metrics depending on its unit. 
         */
        public static float applyDimension(int unit, float value,
                                           DisplayMetrics metrics)
        {
            switch (unit) {
            case COMPLEX_UNIT_PX:
                return value;
            case COMPLEX_UNIT_DIP:
                return value * metrics.density;
            case COMPLEX_UNIT_SP:
                return value * metrics.scaledDensity;
            case COMPLEX_UNIT_PT:
                return value * metrics.xdpi * (1.0f/72);
            case COMPLEX_UNIT_IN:
                return value * metrics.xdpi;
            case COMPLEX_UNIT_MM:
                return value * metrics.xdpi * (1.0f/25.4f);
            }
            return 0;
        }

    1.默认情况下:

    <dimen name="text_size">20sp</dimen>
    float size = mContext.getResources().getDimension(R.dimen.text_size);
    textView.setTextSize(size); 

    此时,size获取的值为20,但textView设置的字体大小为:setRawTextSize(20 * metrics.scaledDensity);

    2.设置字体大小为20:

    float size = mContext.getResources().getDimension(R.dimen.text_size);
    child.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); 
  • 相关阅读:
    新能源汽车三大核心技术
    新能源汽车分类解读
    hadoop(四):配置参数
    HDP2.4安装(六):小结与回顾
    【Web】Nginx配置开机启动
    【Linux】ODBC安装
    【Erlang】源码安装
    【Linux】 Ncures库的介绍与安装
    【RabbitMQ】 RabbitMQ安装
    《MinDoc 接口文档在线管理系统》
  • 原文地址:https://www.cnblogs.com/veins/p/3908677.html
Copyright © 2020-2023  润新知