Kotlin应用Handler.postDelayed失效卡在启动页,ActionBar无法隐藏
问题解决方案
一、启动页卡住无法跳转的问题
你的应用实际启动的是MainActivity而非SplashScreen,因为清单文件里**MainActivity被设置为了启动入口(LAUNCHER)**,SplashScreen根本没有被启动的机会,自然不会执行跳转逻辑。
修复步骤:
- 修改
AndroidManifest.xml,将启动入口转移到SplashScreen:- 把
MainActivity中的<intent-filter>标签移到SplashScreen节点下 - 将
SplashScreen的android:exported改为true(启动Activity必须设置该属性为true)
- 把
修改后的清单文件关键片段:
<activity android:name=".SplashScreen" android:theme="@style/Theme.AppCompat.NoActionBar" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.lib_name" android:value="" /> </activity> <activity android:name=".LandingPage" android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"/> <activity android:name=".MainActivity" android:exported="false"> <meta-data android:name="android.app.lib_name" android:value="" /> </activity>
二、supportActionBar?.hide()无法隐藏ActionBar的问题
你在super.onCreate(savedInstanceState)之前调用了supportActionBar?.hide(),此时ActionBar还未完成初始化,调用hide()不会生效。
修复步骤:
将supportActionBar?.hide()移到super.onCreate和setContentView之后:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash_screen) // 此时ActionBar已初始化,调用hide()可生效 supportActionBar?.hide() Handler(Looper.getMainLooper()).postDelayed({ val intent = Intent(this, LandingPage::class.java) startActivity(intent) finish() }, 3000) }
另外,你已经在清单中给SplashScreen设置了@style/Theme.AppCompat.NoActionBar主题,直接通过主题就能隐藏ActionBar,无需额外写代码调用hide(),两种方式选其一即可。
内容的提问来源于stack exchange,提问作者Stephen Adegbite
相关产品推荐
相关产品推荐

