美文网首页
Android TextView设置字体颜色、文字和大小

Android TextView设置字体颜色、文字和大小

作者: 因为我的心 | 来源:发表于2022-12-01 13:41 被阅读0次

    一、前言:

    Android用ContextCompat替换getResources()获取资源; android SDK 升级到 23 之后,getResource.getColor(R.color.color_name) 过时, 可以使用新加入的方法 ContextCompat.getColor(context, R.color.color_name) 。
    SDK 升级到 23 之后,Context类已经提供了getColor(int id)等一系列获取资源文件的方法。

    二、使用:

    1、MainActivity 类

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            var  tvTitle = findViewById<TextView>(R.id.tv_title)
            var  ivPic = findViewById<ImageView>(R.id.iv_pic)
    
            // ==========设置文字和颜色===========
            //1、设置标题
            tvTitle.text = resources.getText(R.string.title)
            //2、设置颜色过时
            //tvTitle.setTextColor(resources.getColor(R.color.color_FF0000))
            //3、设置颜色最新方法
           // tvTitle.setTextColor(ContextCompat.getColor(this,R.color.color_FF0000))
            //4、扩展的方式设置文字
            tvTitle.textResource = R.string.title
            //5、扩展的方式设置文字颜色
            tvTitle.textColorResource= R.color.color_FF0000
            //6、设置颜色
            tvTitle.setTextColor(Color.parseColor("#FF47A3"));
    
    
    
    
            // ==========设置文字大小===========
            tvTitle.textSize = resources.getDimension(R.dimen.ui_sp10)
            //扩展的方式设置文字大小
            tvTitle.textSizeResource(10f)
    
    
           // ==========设置图片===========
           // ivPic.setImageResource(R.mipmap.vip_prvite_party)
            //扩展的方式设置图片
            // ivPic.srcResource = R.mipmap.vip_prvite_party
            //扩展的方式设置图片
            ivPic.imageResource = R.mipmap.vip_prvite_party
    
            //扩展的方式获取dp 和SP转化
            var dp1 = dip(10f)
            var sp1 = dimen(R.dimen.ui_dp10)
            Log.d("LUO","-----dp1:$dp1")
            Log.d("LUO","-----sp1:$sp1")
        }
    }
    

    2、Kotlin扩展类 TextView、ImageView和Context

    1、TextView类:

    package com.example.myapplication.utils
    
    import android.util.TypedValue
    import android.widget.TextView
    import androidx.annotation.ColorInt
    
    var TextView.textResource: Int
        get() = 0
        set(value) = setText(value)
    
    var TextView.textColorResource: Int
        get() = 0
        set(value) = setTextColor(context.color(value))
    /**
     * Set text color quickly
     */
    fun TextView.textColor(@ColorInt color: Int) = setTextColor(color)
    
    /**
     * Set text size
     */
    fun TextView.textSizeResource(value: Float, unit: Int = TypedValue.COMPLEX_UNIT_SP) {
        when (unit) {
            TypedValue.COMPLEX_UNIT_SP -> textSize = value
            else -> setTextSize(unit, value)
        }
    }
    

    2、ImageView类:

    package com.example.myapplication.utils
    import android.graphics.Color
    import android.graphics.drawable.ColorDrawable
    import android.widget.ImageView
    
    var ImageView.srcResource: Int
        get() = 0
        set(value) = if (value != 0) setImageResource(value) else setImageDrawable(ColorDrawable(Color.TRANSPARENT))
    
    var ImageView.imageResource: Int
        get() = 0
        set(value) {
            srcResource = value
        }
    

    3、Context类:

    package com.example.myapplication.utils
    
    import android.app.Activity
    import android.content.Context
    import android.content.ContextWrapper
    import android.content.res.Resources
    import android.graphics.drawable.Drawable
    import android.os.Build
    import android.util.DisplayMetrics
    import android.util.TypedValue
    import androidx.annotation.AttrRes
    import androidx.annotation.ColorRes
    import androidx.annotation.DimenRes
    import androidx.annotation.DrawableRes
    import androidx.core.content.ContextCompat
    /**
     * Get [DisplayMetrics] from [Resources]
     */
    val Context.displayMetrics: DisplayMetrics get() = resources.displayMetrics
    
    /**
     * Calculate dimensions in pixel of dip
     */
    fun Context.dip(value: Float): Int = dipF(value).toInt()
    
    /**
     * @see [dip]
     */
    fun Context.dip(value: Int): Int = dip(value.toFloat())
    
    /**
     * Calculate dimensions in float of dip
     */
    fun Context.dipF(value: Float): Float =
            TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, displayMetrics)
    
    /**
     * Convert dimensions in pixel from dip
     *
     * @see [Context.dip]
     */
    fun Context?.fromDp(dip: Float): Int = this?.dip(dip)
            ?: Resources.getSystem().displayMetrics.let {
                TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, it).toInt()
            }
    
    /**
     * Convert dimensions in pixel from sp
     */
    fun Context?.fromSp(sp: Float): Int =
            (this?.resources ?: Resources.getSystem()).displayMetrics
                    .let {
                        TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, it).toInt()
                    }
    
    /**
     * Convert dimensions from pixel
     *
     * @param unit support [TypedValue.COMPLEX_UNIT_DIP], [TypedValue.COMPLEX_UNIT_SP], [TypedValue.COMPLEX_UNIT_PT]
     */
    fun Context?.fromPix(valuePixel: Float, unit: Int = TypedValue.COMPLEX_UNIT_DIP): Float =
            (this?.resources ?: Resources.getSystem()).displayMetrics
                    .let {
                        when (unit) {
                            TypedValue.COMPLEX_UNIT_DIP -> valuePixel.div(it.density)
                            TypedValue.COMPLEX_UNIT_SP -> valuePixel.div(it.scaledDensity)
                            TypedValue.COMPLEX_UNIT_PT -> valuePixel.div(it.xdpi).times(72F)
                            else -> valuePixel
                        }
                    }
    
    /**
     * Get color with [ContextCompat]
     */
    fun Context.color(@ColorRes res: Int): Int = ContextCompat.getColor(this, res)
    
    /**
     * Get drawable with context directly
     */
    fun Context.drawable(@DrawableRes res: Int): Drawable? =
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getDrawable(res)
            } else {
                resources.getDrawable(res)
            }
    
    /**
     * Get dimension pixel size in [Int]
     */
    fun Context.dimen(@DimenRes res: Int): Int = resources.getDimensionPixelSize(res)
    
    /**
     * Get dimension pixel size in [Float]
     */
    fun Context.dimenF(@DimenRes res: Int): Float = resources.getDimension(res)
    
    /**
     * Get [Drawable] with attr-res
     */
    fun Context.drawableFromAttr(@AttrRes attrRes: Int): Drawable? = intArrayOf(attrRes)
            .let {
                val typedArray = obtainStyledAttributes(it)
                val drawable = typedArray.getDrawable(0)
                typedArray.recycle()
                drawable
            }
    
    fun Context.asActivity(): Activity? =
            when (this) {
                is Activity -> this
                is ContextWrapper -> baseContext.asActivity()
                else -> null
            }
    
    

    3、其它需要的xml类

    1、dimens.xml

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <resources>
        <!--自定义公共的dp -->
        <dimen name="ui_dp0_5">0.5dp</dimen>
        <dimen name="ui_dp1">1dp</dimen>
        <dimen name="ui_dp2">2dp</dimen>
        <dimen name="ui_dp3">3dp</dimen>
        <dimen name="ui_dp4">4dp</dimen>
        <dimen name="ui_dp5">5dp</dimen>
        <dimen name="ui_dp6">6dp</dimen>
        <dimen name="ui_dp7">7dp</dimen>
        <dimen name="ui_dp8">8dp</dimen>
        <dimen name="ui_dp9">1dp</dimen>
        <dimen name="ui_dp10">10dp</dimen>
        <dimen name="ui_dp11">11dp</dimen>
        <dimen name="ui_dp12">12dp</dimen>
        <dimen name="ui_dp13">13dp</dimen>
        <dimen name="ui_dp14">14dp</dimen>
        <dimen name="ui_dp15">15dp</dimen>
        <dimen name="ui_dp16">16dp</dimen>
        <dimen name="ui_dp17">17dp</dimen>
        <dimen name="ui_dp18">18dp</dimen>
        <dimen name="ui_dp19">19dp</dimen>
        <dimen name="ui_dp20">20dp</dimen>
        <dimen name="ui_dp21">21dp</dimen>
        <dimen name="ui_dp22">22dp</dimen>
        <dimen name="ui_dp23">23dp</dimen>
        <dimen name="ui_dp24">24dp</dimen>
        <dimen name="ui_dp25">25dp</dimen>
        <dimen name="ui_dp26">26dp</dimen>
        <dimen name="ui_dp27">27dp</dimen>
        <dimen name="ui_dp28">28dp</dimen>
        <dimen name="ui_dp29">29dp</dimen>
        <dimen name="ui_dp30">30dp</dimen>
        <dimen name="ui_dp31">31dp</dimen>
        <dimen name="ui_dp32">32dp</dimen>
        <dimen name="ui_dp33">33dp</dimen>
        <dimen name="ui_dp34">34dp</dimen>
        <dimen name="ui_dp35">35dp</dimen>
        <dimen name="ui_dp36">36dp</dimen>
        <dimen name="ui_dp37">37dp</dimen>
        <dimen name="ui_dp38">38dp</dimen>
        <dimen name="ui_dp39">39dp</dimen>
        <dimen name="ui_dp40">40dp</dimen>
        <dimen name="ui_dp41">41dp</dimen>
        <dimen name="ui_dp42">42dp</dimen>
        <dimen name="ui_dp43">43dp</dimen>
        <dimen name="ui_dp44">44dp</dimen>
        <dimen name="ui_dp45">45dp</dimen>
        <dimen name="ui_dp46">46dp</dimen>
        <dimen name="ui_dp47">47dp</dimen>
        <dimen name="ui_dp48">48dp</dimen>
        <dimen name="ui_dp49">49dp</dimen>
        <dimen name="ui_dp50">50dp</dimen>
        <dimen name="ui_dp51">51dp</dimen>
        <dimen name="ui_dp52">52dp</dimen>
        <dimen name="ui_dp53">53dp</dimen>
        <dimen name="ui_dp54">54dp</dimen>
        <dimen name="ui_dp55">55dp</dimen>
        <dimen name="ui_dp56">56dp</dimen>
        <dimen name="ui_dp57">57dp</dimen>
        <dimen name="ui_dp58">58dp</dimen>
        <dimen name="ui_dp59">59dp</dimen>
        <dimen name="ui_dp60">60dp</dimen>
        <dimen name="ui_dp61">61dp</dimen>
        <dimen name="ui_dp62">62dp</dimen>
        <dimen name="ui_dp64">64dp</dimen>
        <dimen name="ui_dp65">65dp</dimen>
        <dimen name="ui_dp70">70dp</dimen>
        <dimen name="ui_dp75">75dp</dimen>
        <dimen name="ui_dp80">80dp</dimen>
        <dimen name="ui_dp85">85dp</dimen>
        <dimen name="ui_dp90">90dp</dimen>
        <dimen name="ui_dp95">95dp</dimen>
        <dimen name="ui_dp100">100dp</dimen>
        <dimen name="ui_dp104">104dp</dimen>
        <dimen name="ui_dp180">180dp</dimen>
    
    
        <!--自定义公共的sp -->
        <dimen name="ui_sp1">1sp</dimen>
        <dimen name="ui_sp2">2sp</dimen>
        <dimen name="ui_sp3">3sp</dimen>
        <dimen name="ui_sp4">4sp</dimen>
        <dimen name="ui_sp5">5sp</dimen>
        <dimen name="ui_sp6">6sp</dimen>
        <dimen name="ui_sp7">7sp</dimen>
        <dimen name="ui_sp8">8sp</dimen>
        <dimen name="ui_sp9">1sp</dimen>
        <dimen name="ui_sp10">10sp</dimen>
        <dimen name="ui_sp11">11sp</dimen>
        <dimen name="ui_sp12">12sp</dimen>
        <dimen name="ui_sp13">13sp</dimen>
        <dimen name="ui_sp14">14sp</dimen>
        <dimen name="ui_sp15">15sp</dimen>
        <dimen name="ui_sp16">16sp</dimen>
        <dimen name="ui_sp17">17sp</dimen>
        <dimen name="ui_sp18">18sp</dimen>
        <dimen name="ui_sp19">19sp</dimen>
        <dimen name="ui_sp20">20sp</dimen>
        <dimen name="ui_sp21">21sp</dimen>
        <dimen name="ui_sp22">22sp</dimen>
        <dimen name="ui_sp23">23sp</dimen>
        <dimen name="ui_sp24">24sp</dimen>
        <dimen name="ui_sp25">25sp</dimen>
        <dimen name="ui_sp26">26sp</dimen>
        <dimen name="ui_sp27">27sp</dimen>
        <dimen name="ui_sp28">28sp</dimen>
    
    </resources>
    

    2、colors.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
     
        <color name="color_FF0000">#FF0000</color>
    </resources>
    

    相关文章

      网友评论

          本文标题:Android TextView设置字体颜色、文字和大小

          本文链接:https://www.haomeiwen.com/subject/dxfsfdtx.html