sdk 28
可用。我正在尝试编写一个“开关”功能,该功能将根据Android版本调用任何一种方法,因此每个人都很高兴。即将替换为
findViewById
requireViewById
感觉是错误的,因为将来后者可能会被弃用。
一般来说,是否有任何优雅的方法可以进行这样的开关,而不会重写太多代码?我尝试过的是:我在Android Studio项目中有一个findViewById
文件,其中定义了该功能:
UiUtils.kt
该功能是从this Answer借来的AlfredoTostón
。 但是,Android Studio标记了RED所有出现(校正:仅标记了整个项目的接收器,而不是
getViewById
),并且每当我悬停任何一个时,都会给我一个错误:
...
import android.os.Build
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
...
fun <T : View> View.getViewById(id: Int): T = when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.P -> requireViewById<T>(id)
else -> findViewById(id) ?: throw IllegalArgumentException()
}
...
fun AppCompatActivity.setupToolbarInsets() {
val spacer = getViewById<View>(R.id.toolbar_spacer)
}
我在旧项目中也有相同的方案,我创建了2个不同的视图来处理视图和活动方案,创建单独的扩展功能:
Activity
也许这对您有帮助