一、前言:
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>
网友评论