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

Kotlin中如何通过类、文件及目录共享函数?新手求助

嘿,作为Kotlin新手碰到这种跨类共享函数的问题太正常啦!我来给你几个实用的解决方案,让你能在Dock类里顺利调用隐藏状态栏的函数(顺便提一句,Kotlin里更推荐驼峰命名法,所以下面我会把函数名改成hideBars(),更符合编码规范哦):

方案1:提取为顶层函数

把这个隐藏状态栏的逻辑从Theme类里抽出来,放到一个单独的工具类文件(比如ActivityUtils.kt)里作为顶层函数——顶层函数在同一个包下的类可以直接调用,不同包的话导入一下就行,非常方便。

代码示例:

// ActivityUtils.kt
import android.app.Activity
import android.view.View

// 以Activity作为接收者,所有Activity子类都能直接用这个函数
fun Activity.hideBars() {
    window.decorView.apply {
        systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN
    }
}

然后修改你的Dock类,直接调用这个函数:

class Dock : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dock)
        hideBars() // 直接调用顶层函数
    }
}

Theme类里也可以删掉原来的hide_bars(),直接用这个顶层函数就好啦。

方案2:使用AppCompatActivity扩展函数

这其实是顶层函数的进阶版,专门给AppCompatActivity做扩展,这样只有它的子类能调用这个函数,范围更精准:

// ActivityExtensions.kt
import android.view.View
import androidx.appcompat.app.AppCompatActivity

fun AppCompatActivity.hideBars() {
    window.decorView.apply {
        systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN
    }
}

调用方式和方案1完全一样,Dock和Theme类里直接写hideBars()就能用。

方案3:创建基类继承

如果你的项目里有多个Activity都需要隐藏状态栏的功能,那创建一个基类是最优雅的做法:

// BaseActivity.kt
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity

// 定义一个开放的基类,包含共享的函数
open class BaseActivity : AppCompatActivity() {
    fun hideBars() {
        window.decorView.apply {
            systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN
        }
    }
}

然后让Theme和Dock都继承这个基类:

class Theme : BaseActivity() {
    // 这里可以直接调用hideBars()
}

class Dock : BaseActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dock)
        hideBars() // 调用基类的共享函数
    }
}

这三个方案都能解决你的问题,你可以根据自己的项目需求选最合适的~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:12:56