如何修复 android.widget.TextView() 需要 api 21 错误
How to fix android.widget.TextView() requires api 21 error
我有 BubbleTextView,它是一个自定义 TextView,后面有一个蓝色气泡作为背景。
这是我的代码:
class BubbleTextView(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : TextView(context, attrs, defStyleAttr, defStyleRes) {
private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
private val rectPath = Path()
private val trianglePath = Path()
private val rectF = RectF()
private val triangleSize = resources.getDimensionPixelSize(R.dimen.triangle_size_20dp).toFloat()
private val cornerRadius = resources.getDimensionPixelSize(R.dimen.corner_radius_4dp).toFloat()
constructor(context: Context?):this(context, null, 0, 0)
constructor(context: Context?, attrs: AttributeSet?):this(context, attrs, 0, 0)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int):this(context, attrs, defStyleAttr, 0)
init{
paint.style = Paint.Style.FILL
paint.color = Color.CYAN
}
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
val myWidth = (right - left).toFloat()
val myHeight = (bottom - top).toFloat()
val centerX = myWidth / 2f
val lowerEdgeY = myHeight * 0.8f
rectF.set(0f, 0f, myWidth, lowerEdgeY)
rectPath.addRoundRect(rectF,cornerRadius, cornerRadius, Path.Direction.CW )
val delta = triangleSize * 0.5f
trianglePath.moveTo(centerX - delta, lowerEdgeY)
trianglePath.lineTo(centerX + delta, lowerEdgeY)
trianglePath.lineTo(centerX, myHeight)
trianglePath.close()
}
override fun onDraw(canvas: Canvas?) {
canvas?.drawPath(rectPath, paint)
canvas?.drawPath(trianglePath, paint)
super.onDraw(canvas)
}
}
: TextView
以红色突出显示并出现错误:android.widget.TextView() 需要 api 21。
对于 api 21 及以上的 apl 工作正常。但是下面的应用程序立即崩溃了。
提前致谢。
构造函数
class BubbleTextView(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : TextView(context, attrs, defStyleAttr, defStyleRes)
添加到 API 级别 21,所以你只能使用 >= 21
你应该:
class BubbleTextView : TextView {
private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
private val rectPath = Path()
private val trianglePath = Path()
private val rectF = RectF()
private val triangleSize = resources.getDimensionPixelSize(R.dimen.triangle_size_20dp).toFloat()
private val cornerRadius = resources.getDimensionPixelSize(R.dimen.corner_radius_4dp).toFloat()
constructor(context: Context?):super(context)
constructor(context: Context?, attrs: AttributeSet?):super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int):super(context, attrs, defStyleAttr)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)
init{
paint.style = Paint.Style.FILL
paint.color = Color.CYAN
}
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
val myWidth = (right - left).toFloat()
val myHeight = (bottom - top).toFloat()
val centerX = myWidth / 2f
val lowerEdgeY = myHeight * 0.8f
rectF.set(0f, 0f, myWidth, lowerEdgeY)
rectPath.addRoundRect(rectF,cornerRadius, cornerRadius, Path.Direction.CW )
val delta = triangleSize * 0.5f
trianglePath.moveTo(centerX - delta, lowerEdgeY)
trianglePath.lineTo(centerX + delta, lowerEdgeY)
trianglePath.lineTo(centerX, myHeight)
trianglePath.close()
}
override fun onDraw(canvas: Canvas?) {
canvas?.drawPath(rectPath, paint)
canvas?.drawPath(trianglePath, paint)
super.onDraw(canvas)
}
}
您收到的警告来自 Android Studio Inspection,它会扫描应用程序中的所有 Android API 调用,并对并非所有版本都可用的任何调用发出警告此应用程序的目标(根据清单中的最小 SDK 属性)。
如果您真的想使用此 API 并且不需要支持旧设备,只需将 build.gradle
中的 minSdkVersion
设置为 21 或更高。
请注意 minSdkVersion
是一个整数,指定申请 运行 所需的最低 API 级别。如果系统的 API 级别低于此属性中指定的值,Android 系统将阻止用户安装该应用程序。
我有 BubbleTextView,它是一个自定义 TextView,后面有一个蓝色气泡作为背景。
这是我的代码:
class BubbleTextView(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : TextView(context, attrs, defStyleAttr, defStyleRes) {
private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
private val rectPath = Path()
private val trianglePath = Path()
private val rectF = RectF()
private val triangleSize = resources.getDimensionPixelSize(R.dimen.triangle_size_20dp).toFloat()
private val cornerRadius = resources.getDimensionPixelSize(R.dimen.corner_radius_4dp).toFloat()
constructor(context: Context?):this(context, null, 0, 0)
constructor(context: Context?, attrs: AttributeSet?):this(context, attrs, 0, 0)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int):this(context, attrs, defStyleAttr, 0)
init{
paint.style = Paint.Style.FILL
paint.color = Color.CYAN
}
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
val myWidth = (right - left).toFloat()
val myHeight = (bottom - top).toFloat()
val centerX = myWidth / 2f
val lowerEdgeY = myHeight * 0.8f
rectF.set(0f, 0f, myWidth, lowerEdgeY)
rectPath.addRoundRect(rectF,cornerRadius, cornerRadius, Path.Direction.CW )
val delta = triangleSize * 0.5f
trianglePath.moveTo(centerX - delta, lowerEdgeY)
trianglePath.lineTo(centerX + delta, lowerEdgeY)
trianglePath.lineTo(centerX, myHeight)
trianglePath.close()
}
override fun onDraw(canvas: Canvas?) {
canvas?.drawPath(rectPath, paint)
canvas?.drawPath(trianglePath, paint)
super.onDraw(canvas)
}
}
: TextView
以红色突出显示并出现错误:android.widget.TextView() 需要 api 21。
对于 api 21 及以上的 apl 工作正常。但是下面的应用程序立即崩溃了。
提前致谢。
构造函数
class BubbleTextView(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : TextView(context, attrs, defStyleAttr, defStyleRes)
添加到 API 级别 21,所以你只能使用 >= 21
你应该:
class BubbleTextView : TextView {
private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
private val rectPath = Path()
private val trianglePath = Path()
private val rectF = RectF()
private val triangleSize = resources.getDimensionPixelSize(R.dimen.triangle_size_20dp).toFloat()
private val cornerRadius = resources.getDimensionPixelSize(R.dimen.corner_radius_4dp).toFloat()
constructor(context: Context?):super(context)
constructor(context: Context?, attrs: AttributeSet?):super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int):super(context, attrs, defStyleAttr)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)
init{
paint.style = Paint.Style.FILL
paint.color = Color.CYAN
}
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
val myWidth = (right - left).toFloat()
val myHeight = (bottom - top).toFloat()
val centerX = myWidth / 2f
val lowerEdgeY = myHeight * 0.8f
rectF.set(0f, 0f, myWidth, lowerEdgeY)
rectPath.addRoundRect(rectF,cornerRadius, cornerRadius, Path.Direction.CW )
val delta = triangleSize * 0.5f
trianglePath.moveTo(centerX - delta, lowerEdgeY)
trianglePath.lineTo(centerX + delta, lowerEdgeY)
trianglePath.lineTo(centerX, myHeight)
trianglePath.close()
}
override fun onDraw(canvas: Canvas?) {
canvas?.drawPath(rectPath, paint)
canvas?.drawPath(trianglePath, paint)
super.onDraw(canvas)
}
}
您收到的警告来自 Android Studio Inspection,它会扫描应用程序中的所有 Android API 调用,并对并非所有版本都可用的任何调用发出警告此应用程序的目标(根据清单中的最小 SDK 属性)。
如果您真的想使用此 API 并且不需要支持旧设备,只需将 build.gradle
中的 minSdkVersion
设置为 21 或更高。
请注意 minSdkVersion
是一个整数,指定申请 运行 所需的最低 API 级别。如果系统的 API 级别低于此属性中指定的值,Android 系统将阻止用户安装该应用程序。