Не могу установить цветной фильтр на значок переполнения на панели инструментов - PullRequest
1 голос
/ 29 февраля 2020

Почему Kotlin не позволяет мне применить цветной фильтр к значку переполнения на моей панели инструментов?

Выражение 'colorFilter' типа 'ColorFilter' не может быть вызвано как функция. Функция invoke () не найдена

enter image description here

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/my_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/actionBarSize"
    android:minHeight="?android:attr/actionBarSize"
    app:contentInsetStartWithNavigation="0dp"
    app:contentInsetStart="0dp">

    <LinearLayout
        android:id="@+id/toolbar_textLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:layout_marginStart="16dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/toolbar_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
          style="@android:style/TextAppearance.Material.Widget.ActionBar.Title"/>
    </LinearLayout>
</androidx.appcompat.widget.Toolbar>

Kotlin

    mToolbar.overflowIcon?.colorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP)

    // 
    val myAttr = intArrayOf(R.attr.tintColor)
    val taAttr = this.theme.obtainStyledAttributes(myAttr)
    val colorAttr = taAttr.getColor(0, Color.BLACK)

1 Ответ

0 голосов
/ 29 февраля 2020

TL; DR: изменить colorFilter() на setColorFilter().


Существует два метода setColorFilter() для Drawable.

. Один из них занимает ColorFilter. Это соответствует соответствующему getColorFilter() методу. Kotlin рассматривает их как синтаксически равные var с именем colorFilter. Итак, если у вас есть объект ColorFilter, вы можете написать:

 mToolbar.overflowIcon?.colorFilter = myReallyCoolColorFilterNoReallyItAddsBlueTintToEverything

Другой вызов setColorFilter() принимает два параметра, которые вы укажете: цвет и PorterDuff.Mode. Однако этот метод setColorFilter(), а не colorFilter(). Итак, либо переключитесь на setColorFilter(), либо:

 mToolbar.overflowIcon?.colorFilter = BlendModeColorFilter(Color.RED, BlendMode.SRC_ATOP)

Поскольку вы пытаетесь сослаться на colorFilter, Kotlin предполагает, что вы имеете в виду свойство colorFilter, а это не тип функции и нельзя назвать как один.

...