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
相关产品推荐
相关产品推荐

