当我在自定义视图类中使用 R.styleable 时,我得到一个红色的未解析引用:styleable

noo*_*oob 3 android android-view kotlin

我是初学者。这几天开始学习自定义视图,过程中几乎没有出现什么问题。

\n

当我去Google解决这个问题的时候,有人提出了解决方案,但是都没有成功。我使用 Kotlin 编写的自定义视图。

\n

这是我的自定义视图类,名称是MyView.kt

\n
package com.example.demos\n\nimport android.R\nimport android.content.Context\nimport android.content.res.TypedArray\nimport android.graphics.Canvas\nimport android.graphics.Color\nimport android.graphics.Paint\nimport android.graphics.RectF\nimport android.util.AttributeSet\nimport android.view.View\nimport kotlin.math.min\n\n\nclass MyView : View {\n    //    init\n    private lateinit var arcPaint: Paint\n    private lateinit var progressTextPaint: Paint\n//    private lateinit var arcPaintColor: Color\n    private var arcPaintColor = Color.BLACK\n//    private lateinit var progressTextPaintColor: Color\n    private var progressTextPaintColor = Color.BLACK\n    private var angle = 0f\n    private var progress: Float = angle / 3.6f\n\n\n    //    get/set\n    fun setArcPaintColor(color: Int) {\n        arcPaintColor = color\n    }\n\n    fun getArcPaintColor(): Int {\n        return arcPaintColor\n    }\n\n    fun setProgressTextPaintColor(color: Int) {\n        progressTextPaintColor = color\n    }\n\n    fun getProgressTextPaintColor(): Int {\n        return progressTextPaintColor\n    }\n\n    fun setAngle(float: Float) {\n        angle = float\n        progress = angle / 3.6f\n        invalidate()\n    }\n\n    fun getAngle(): Float {\n        return angle\n    }\n\n    fun setProgress(float: Float) {\n        progress = float\n        angle = progress * 3.6f\n        invalidate()\n    }\n\n    fun getProgress(): Float {\n        return progress\n    }\n\n    /*call method initPaint()*/\n    constructor(context: Context) : super(context) {\n        initPaint()\n    }\n\n    constructor(context: Context, attributeSet: AttributeSet?) : super(context, attributeSet) {\n        initPaint()\n    }\n\n    constructor(context: Context, attributeSet: AttributeSet?, defStyleAttr: Int) : super(\n        context,\n        attributeSet,\n        defStyleAttr\n    ) {\n        arcPaintColor = typedArray.getColor(R.styleable.arcPaintColor,)\n        initPaint()\n    }\n\n\n    /*override onDraw()\xef\xbc\x8cdraw view*/\n    override fun onDraw(canvas: Canvas?) {\n        super.onDraw(canvas)\n        drawView(canvas)\n    }\n\n    //init paints\n    private fun initPaint() {\n        arcPaint = Paint(Paint.ANTI_ALIAS_FLAG).also {\n            it.color = arcPaintColor\n            it.strokeWidth = 5f\n            it.strokeWidth = 40f\n            it.style = Paint.Style.STROKE\n            it.strokeCap = Paint.Cap.ROUND\n        }\n        progressTextPaint = Paint(Paint.ANTI_ALIAS_FLAG).also {\n            it.color = progressTextPaintColor\n//            it.color = Color.GREEN\n//            it.setStrokeWidth(5f)\n            it.style = Paint.Style.FILL\n            it.textSize = 50f\n        }\n    }\n\n    /*draw view*/\n    private fun drawView(canvas: Canvas?) {\n        val displayWidth = width\n        val displayHeight = height\n        /*get center of circle*/\n        val centerX = (displayWidth / 2).toFloat()\n        val centerY = (displayHeight / 2).toFloat()\n\n        /*get radius*/\n        val radius = min(displayWidth, displayHeight) / 4\n\n\n        val rectF = RectF(\n            centerX - radius,\n            centerY - radius,\n            centerX + radius,\n            centerY + radius\n        )\n\n\n        canvas?.drawArc(\n            rectF,\n            0f,\n            angle,\n            false,\n            arcPaint\n        )\n\n        canvas?.drawText(\n            "${String.format("%.1f", progress)}%",\n            centerX - progressTextPaint.measureText("${String.format("%.1f", progress)}%") / 2,\n            centerY,\n            progressTextPaint\n        )\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的自定义属性的 xml 文件

\n
<?xml version="1.0" encoding="utf-8"?>\n<resources>\n    <declare-styleable name="MyView">\n        <attr name="arcPaintColor" format="color"/>\n        <attr name="progressTextPaintColor" format="color"/>\n    </declare-styleable>\n</resources>\n
Run Code Online (Sandbox Code Playgroud)\n

我的自定义属性的 xml 文件

\n

小智 7

问题是您正在导入 android.R

您需要导入 [您的软件包名称].R 版本。