You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android集成Google登录时顶部黑条闪烁下滑问题求助

解决Google登录后状态栏黑条闪烁的问题

你遇到的这个状态栏黑条闪烁下滑的问题,大概率是Google登录界面返回时的窗口过渡动画冲突,或是GoogleApiClient自动管理机制引发的窗口状态异常。结合你的代码,我整理了几个可行的解决方案:

方案1:手动管理GoogleApiClient生命周期(替代enableAutoManage)

enableAutoManage虽能自动处理GoogleApiClient生命周期,但有时会触发不必要的窗口状态变更,进而导致状态栏异常。改成手动管理试试:

修改你的LoginActivity代码,移除enableAutoManage,在onStart和onStop中手动处理连接/断开逻辑:

class LoginActivity() : AppCompatActivity(), GoogleApiClient.OnConnectionFailedListener { 
    var RC_SIGN_IN: Int = 0 
    lateinit var mSignInButton: TextView; 
    lateinit var mMainLogoImage: ImageView; 
    lateinit var gac: GoogleApiClient // 移至类级别变量

    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_login) 
        // 初始化视图
        mSignInButton = findViewById(R.id.loginTextView); 
        mMainLogoImage = findViewById(R.id.mainLogoImage); 
        val gso: GoogleSignInOptions = GoogleSignInOptions 
            .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
            .requestEmail() 
            .build() 
        gac = GoogleApiClient 
            .Builder(this) 
            // 移除enableAutoManage(this, this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
            .build() 

        mSignInButton.setOnClickListener { 
            val signInIntent: Intent = Auth.GoogleSignInApi.getSignInIntent(gac) 
            startActivityForResult(signInIntent, RC_SIGN_IN) 
        } 
    }

    // 添加手动生命周期管理
    override fun onStart() {
        super.onStart()
        gac.connect()
    }

    override fun onStop() {
        super.onStop()
        if (gac.isConnected) {
            gac.disconnect()
        }
    }

    override fun onConnectionFailed(p0: ConnectionResult) {} 
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 
        super.onActivityResult(requestCode, resultCode, data); 
        if(requestCode == RC_SIGN_IN) { 
            val result: GoogleSignInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data) 
            handleSignInResult(result); 
        } 
    } 
    private fun handleSignInResult(signInResult: GoogleSignInResult) { 
        if(signInResult.isSuccess) { 
            // val intent = Intent(this, MainActivity::class.java) 
            //startActivity(intent) 
        } else { 
            Toast.makeText(this, "Failed to log in, please try again later.", Toast.LENGTH_LONG).show() 
        } 
    } 
}

方案2:调整Activity主题,避免全屏冲突

检查AndroidManifest.xml中LoginActivity的主题设置,确保未使用强制全屏或隐藏状态栏的主题(比如Theme.AppCompat.Light.NoActionBar.Fullscreen),如果有,替换为普通非全屏主题:

<activity android:name=".LoginActivity"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">
</activity>

若必须使用全屏,可在onCreate中手动设置状态栏透明,避免切换时的闪烁:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    // 配置状态栏
    window.apply {
        clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        statusBarColor = Color.TRANSPARENT
    }
    setContentView(R.layout.activity_login) 
    // ... 其他代码
}

方案3:禁用Google登录界面的过渡动画

启动Google登录Intent时禁用过渡动画,避免返回时的动画冲突:

mSignInButton.setOnClickListener { 
    val signInIntent: Intent = Auth.GoogleSignInApi.getSignInIntent(gac) 
    startActivityForResult(signInIntent, RC_SIGN_IN) 
    // 禁用过渡动画
    overridePendingTransition(0, 0)
}

同时在登录成功跳转MainActivity时,可设置平缓的过渡动画:

private fun handleSignInResult(signInResult: GoogleSignInResult) { 
    if(signInResult.isSuccess) { 
        val intent = Intent(this, MainActivity::class.java) 
        startActivity(intent) 
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
        finish()
    } else { 
        Toast.makeText(this, "Failed to log in, please try again later.", Toast.LENGTH_LONG).show() 
    } 
}

建议先尝试方案1,这是解决此类问题最常见的方法,因为enableAutoManage的自动生命周期管理有时会和应用窗口状态产生冲突。若无效,再结合方案2和3调整。

内容的提问来源于stack exchange,提问作者Joshua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:42:36