• 在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); 
  • 相关阅读:
    Luogu P5072 [Ynoi2015]盼君勿忘
    activemq的高级特性:通配符式分层订阅
    activemq的高级特性:消息的可靠性
    activemq的高级特性:消息持久订阅
    activemq的高级特性:消息存储持久化
    activeMQ的高级特性:嵌入activemq
    activeMQ的request-response请求响应模式
    activeMQ的spring、springboot的DEMO
    activemq的搭建、启动,简单demo
    mysql中的锁
  • 原文地址:https://www.cnblogs.com/veins/p/3908677.html
Copyright © 2020-2023  润新知