2016-04-18 3 views
3

Привет, ребята, я новичок в Android/Kotlin/Anko, и у меня возник вопрос о том, как получить доступ к цветным (и, возможно, другим) ресурсам из Anko.Доступ к идентификаторам ресурсов с использованием Kotlin & Anko

Я знаю, что есть помощники, как textResource, где вы просто передать R.string.my_color, чтобы упростить процесс настройки строки ресурсов, но как о доступе цвета с использованием экземпляра Resources из View класса?

Предположим, у вас есть подкласс Button и вы хотите изменить цвет текста. Если вы используете textResource, он изменит текстовую строку, а не цвет, и если вы используете textColor, тогда вы должны указать идентификатор реального ресурса, используя resources.getColor(R.color.my_color, null), что не было бы так обидно, если бы вам не пришлось передавать необязательный параметр темы (null здесь)

Создает расширение на Resources Полезно здесь?

fun Int.fromResources(resources: Resources): Int { 
    return resources.getColor(this, null) 
} 

Каков рекомендуемый способ?

EDIT

Я изменил расширение на textColor значение, чтобы сделать именно то, которое я нашел чистейшую вещь, чтобы сделать, кроме как я понятия не имею, если это действительно Android дружеский

var android.widget.TextView.textColor: Int 
    get() = throw AnkoException("'android.widget.TextView.textColor' property does not have a getter") 
    set(v) = setTextColor(resources.getColor(v, null)) 
+0

Я предлагаю использовать 'ContextCompat.getColor (context, R.color.color_id)' вместо 'resources.getColor (v, null)' –

ответ

2

Я думаю, вы можете использовать расширение свойства, подобное этому, а не тому, которое вы предложили:

var TextView.textColorRes: Int 
    get() = throw PropertyWithoutGetterException("textColorRes") 
    set(@ColorRes v) = setTextColor(resources.getColor(v, null)) 

Или использовать ContextCompat как предложено Damian Petla:

var TextView.textColorRes: Int 
    get() = throw PropertyWithoutGetterException("textColorRes") 
    set(@ColorRes v) = setTextColor(ContextCompat.getColor(context, v)) 

Вы должны держать АНКО textColor:

  • Позволяет задать цвет непосредственно, не вынимая его из XML, если это необходимо в какой-то момент
  • Предотвращает импорт неправильного textColor (Anko's one или yours), те же названия свойств с различным поведением - не очень хорошая идея.

 Смежные вопросы

  • Нет связанных вопросов^_^