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

2022-12-01  本文已影响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>
上一篇下一篇

猜你喜欢

热点阅读