启动页水平ProgressBar动画开发:Kotlin代码中ProgressBar ID标红报错问题
解决SplashScreen中ProgressBar ID在Kotlin代码里变红的问题
嘿,我来帮你搞定这个问题!你遇到的情况是Kotlin代码里找不到XML中定义的ProgressBar引用,ID显示红色说白了就是编译器在说“我找不到这个视图呀”,下面给你几个靠谱的解决思路:
1. 启用并使用视图绑定(推荐方案)
现在Android开发更推荐用视图绑定来获取界面控件,不用手动写findViewById,还能避免ID拼写错误。你可以这么做:
- 打开模块级别的
build.gradle文件(app目录下的那个),添加视图绑定配置:android { // 其他原有配置... buildFeatures { viewBinding true } } - 同步项目后,修改你的SplashScreen代码,通过绑定类来获取ProgressBar:
class SplashScreen : AppCompatActivity() { // 声明绑定对象 private lateinit var binding: SplashScreenBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化绑定 binding = SplashScreenBinding.inflate(layoutInflater) setContentView(binding.root) // 通过binding获取progressBar binding.progressBar.max = 1000 val currentProg = 999 ObjectAnimator.ofInt(binding.progressBar, "progress", currentProg) .setDuration(4000) .start() } }
2. 手动用findViewById获取视图
如果你暂时不想用视图绑定,也可以手动通过findViewById拿到ProgressBar的实例,这样编译器就能找到它了:
class SplashScreen : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.splash_screen) // 手动获取ProgressBar实例 val progressBar = findViewById<ProgressBar>(R.id.progressBar) progressBar.max = 1000 val currentProg = 999 ObjectAnimator.ofInt(progressBar, "progress", currentProg) .setDuration(4000) .start() } }
3. 检查基础配置是否正确
有时候可能是一些小疏忽导致的:
- 确认
setContentView(R.layout.splash_screen)里的布局文件名和你定义ProgressBar的XML文件完全一致(比如有没有拼错大小写) - 检查XML里的ProgressBar ID是不是确实是
@+id/progressBar,有没有拼写错误 - 试试清理重建项目:点击Android Studio顶部的
Build->Clean Project,然后Build->Rebuild Project,编译器缓存有时候会搞鬼
你提供的原始代码参考
XML布局:
<ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="150dp" android:progressDrawable="@drawable/progress_bar" android:layout_height="10dp" android:layout_marginBottom="50dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" />
Kotlin代码(存在引用问题的版本):
class SplashScreen : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.splash_screen) progressBar.max = 1000 val currentProg = 999 ObjectAnimator.ofInt(progressBar, "progress", currentProg) .setDuration(4000) .start() } }
内容的提问来源于stack exchange,提问作者Youssef EL Abassi
相关产品推荐
相关产品推荐

