我有一个对象,它有许多与屏幕相关的方法(这里我只举两个例子)如下:
object AWScreen {
private lateinit var context: Context
fun init(context: Context) {
this.context = context
}
private fun getScreenHeightAlternative(oContext: Context): Int {
val display = oContext.resources.displayMetrics
return display.heightPixels
}
fun getScreenWidth(context: Context?): Int {
val size = Point()
var screenWidth = 0
try {
(context as Activity).windowManager.defaultDisplay.getRealSize(size)
screenWidth = size.x
} catch (e: NoSuchMethodError) {
e.printStackTrace()
}
return screenWidth
}
}
我正在尝试初始化应用程序类-when应用程序中的所有依赖项(本例中仅为上下文)-如下所示:
@HiltAndroidApp
class AWApplication : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
AWScreen.init(this)
}
}
但是,如您所见,我得到的是应用程序上下文,而不是活动上下文(访问资源所需的内容)。
我可以这么做:
AWScreen.init(this)
在任何依赖于AWScreen onCreate的活动中,我都试图避免这一点,因为AWScreen在我的应用程序中被广泛使用,我不想重复代码,事实上,这就是Hilt (依赖注入)的目的。
在简历中,我有许多自定义类(对象),在这些类中,我需要一个活动上下文(而不是应用程序上下文)来访问资源(或任何其他类(取决于上下文)),但我不知道如何使用Hilt以“依赖注入方式”提供它,并避免在每个活动中初始化该对象的依赖项。
编辑1:
正如@مصطفىنعمه所提到的,我可以使用任何上下文(活动上下文和应用程序上下文)访问资源,但是在我的مصطفىنعمه类中有如下方法:
private fun getSoftButtonsBarHeight(oActivity: Activity): Int {
val metrics = DisplayMetrics()
oActivity.windowManager.defaultDisplay.getMetrics(metrics)
val usableHeight = metrics.heightPixels
oActivity.windowManager.defaultDisplay.getRealMetrics(metrics)
val realHeight = metrics.heightPixels
return if (realHeight > usableHeight) realHeight - usableHeight else 0
}
在这里,我需要访问windowManager,而windowManager只在活动上下文中可用,因此,要明确的是,我需要知道的是如何将活动上下文注入自定义类。
发布于 2022-08-21 03:20:09
我不完全理解你的问题,但是
您可以通过应用程序上下文访问资源,通常如下所示:注入上下文后->->
val someString = context?.resources.getString(R.string.some_string) //context is nullable so "?" is needed
https://stackoverflow.com/questions/73433783
复制相似问题