Как получить цвет на основе имени атрибута и текущей темы?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как получить цвет на основе имени атрибута и текущей темы?

Сообщение Anonymous »

В библиотеку Markwon я хочу добавить плагин, который будет показывать изображение из ресурсов приложения, если написать ![alt text](drawable://icon_name) в формате уценки.Приведенный ниже код работает. Но TintColor не применяется к изображению. Из-за этого его не видно в темной теме. Поэтому я добавил значение ресурса android.R.attr.colorControlNormal, чтобы изменить TintColor рисуемого объекта. Видимо Марквон стирает это значение (оно есть в разметке рисуемого файла в формате "?attr/colorControlNormal".
Сработало. Но цвет при этом не меняется переключение на темную тему. Значение атрибута android.R.attr.colorControlNormal остается таким же, как и при белой теме. В чем может быть ошибка?
При этом. drawable используется непосредственно в разметке на панели инструментов или в других местах, TintColor изменяется в соответствии с темой.
Изображение

Изображение

// https://noties.io/Markwon/docs/v4/image ... emehandler
class DrawableImagesConfigure(private val context: Context) : ImagesPlugin.ImagesConfigure {

override fun configureImages(plugin: ImagesPlugin) {
plugin.addSchemeHandler(schemeHandler)
}

private val schemeHandler = object : SchemeHandler() {
@SuppressLint("DiscouragedApi")
// will handle URLs like `drawable://ic_account_24dp_white`
override fun handle(raw: String, uri: Uri): ImageItem {
val drawableName = raw.substring("drawable://".length)
val drawableId = context.resources.getIdentifier(drawableName, "drawable", context.packageName)

// it's fine if it throws, async-image-loader will catch exception
val drawable: Drawable = AppCompatResources.getDrawable(context, drawableId)
?: throw Exception("The drawable with drawableId $drawableId does not exist")

// every time the same value
val tintColor = MaterialColors.getColor(context, android.R.attr.colorControlNormal, Color.RED)
drawable.setTint(tintColor)
return ImageItem.withResult(drawable)
}

override fun supportedSchemes(): Collection {
return setOf("drawable")
}
}
}






Подробнее здесь: https://stackoverflow.com/questions/790 ... rent-theme
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»