問題描述
我想在 Kotlin 中自定義新按鈕時遇到問題 (I have a problem when I want to customize my new button in Kotlin)
當我在 Kotlin 中創建 myButton
時,我的代碼中有此錯誤。
參考解法
方法 1:
Button
is a Function, not a class extended. Just make an function in MainActivity
For example
class MainActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
MyButton() // this is how to make button inside function
}
private fun MyButton(){
// you can put your button listener here
// example :
mMyBtn.setOnClickListener {
// and then put ur logic here
Toast.makeText(this, "Button Clicked", Toast.LENGTH_SHORT).show()
}
}
}
or maybe try below
class MyButton : androidx.appcompat.widget.AppCompatButton {
constructor(context: Context?) : super(context!!)
constructor(context: Context?, attrs: AttributeSet?) : super(context!!, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context!!, attrs, defStyle)
protected override fun onDraw(canvasObject: Canvas) {
super.onDraw(canvasObject)
}
}
let me know if this works for you :)
方法 2:
Firstly it a warning, not an error. Your code will still run fine. But the reason for this warning/suggestion is because AppCompatButton
is part of androidx
library also comes with backward support for some features , they are also tint aware meaning it allows dynamic and background tints.
From the documentation of AppCompatButton
A Button which supports compatible features on older versions of the platform, >including:
- Allows dynamic tint of its background via the background tint methods in ViewCompat.
- Allows setting of the background tint using R.attr.backgroundTint and R.attr.backgroundTintMode.
- Allows setting of the font family using R.attr.fontFamily.
- This will automatically be used when you use Button in your layouts and the top‑level activity / dialog is provided by appcompat. You should only need to manually use this class when writing custom views.
From above, When ever you use a Button
, it automatically uses AppCompatButton
, so you should take care of extending AppCompatButton
in custom views to get most of it.
(by DevCode、xfathurrahman、Rajan Kali)