zoukankan      html  css  js  c++  java
  • 在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); 
  • 相关阅读:
    使用RPC的接口创建账户同时购买内存并为其抵押CPU和NET资源
    使用RPC的接口创建账户
    【移动安全基础篇】——21、Android脱壳思路
    插件
    NGUI 优化
    影子
    优化文章索引
    MVC
    《你不常用的c#之XX》
    CMake
  • 原文地址:https://www.cnblogs.com/veins/p/3908677.html
Copyright © 2011-2022 走看看