Kotlin легко получить доступ к ресурсам вне деятельности - PullRequest
0 голосов
/ 21 января 2019

Я новичок в Android и Kotlin. Я пытаюсь создать ResourcesHelper class для легкого доступа к моим пользовательским цветам и шрифтам из любого другого пользовательского класса в моем приложении. Но в этом помощнике у меня нет контекста. Я читал способы получения контекста, расширяющего класс Application, но затем компилятор говорит, что я не могу получить доступ к этому контексту в моем объекте-компаньоне ResourcesHelper, так как это приведет к утечкам памяти. Кроме того, я закончил с дополнительной цепочкой.

Вот как я хотел бы использовать его:

class ResourcesHelper {

    companion object {
        val lightBlue = resources.getColor(R.color.lightBlue)
        val customBlue = resources.getColor(R.color.customBlue)
        // [...]    
        val fontAwesome = resources.getFont(R.font.fontawesome)
        val lemonMilk = resources.getFont(R.font.lemonmilk)
    }
}

enum class ButtonStyle {
    MENU,
    // [...]
    VICTORY
}

class CustomButton(c: Context, attrs: AttributeSet) : Button(c, attrs) {

    var isButtonActivated = false

    fun setStyle(style: ButtonStyle) {
        setBackgroundColor(ResourcesHelper.transparent)

        when(style) {
            ButtonStyle.MENU -> {
                setText(R.string.menu_button)
                typeface = ResourcesHelper.lemonMilk
                setBackgroundColor(ResourcesHelper.customRed)
                setTextColor(ResourcesHelper.white)
            }
            // [...]
            ButtonStyle.VICTORY -> {
                setText(R.string.victory_button)
                typeface = ResourcesHelper.lemonMilk
                setBackgroundColor(ResourcesHelper.customRed)
                setTextColor(ResourcesHelper.white)
            }
        }
    }
}

Я также читал этот пост Доступ Android к ресурсам вне деятельности , но это на Java, и я понятия не имею, как это сделать в Kotlin.

Я полностью растерялся, что и как это сделать ... Или, если есть лучший способ добиться достижения ресурсов из любого места.

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Если вы хотите поддерживать разные версии Android, я рекомендую использовать ContextCompat. Он обеспечивает унифицированный интерфейс для доступа к различным ресурсам и обратной совместимости для более старых версий Android.

Для AnroidX используйте androidx.core.content.ContextCompat, для Поддержка V4 : android.support.v4.content.ContextCompat.

val lightBlue = ContextCompat.getColor(context, R.color.lightBlue)
val customBlue = ContextCompat.getColor(context, R.color.customBlue)
0 голосов
/ 21 января 2019

Для Системные ресурсы Color, String и т. Д. , которые можно использовать, как показано ниже

import android.content.res.Resources

    class ResourcesHelper {

        companion object {
            val lightBlue = Resources.getSystem().getColor(R.color.lightBlue)

        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...