为什么Kotlin不允许我对工具栏中的溢出图标应用滤色器?



android - 无法将颜色滤镜设置为工具栏中的溢出图标-LMLPHP

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)

最佳答案

TL; DR:将colorFilter()更改为setColorFilter()
setColorFilter()上有两种Drawable方法。

一个需要一个ColorFilter。匹配相应的getColorFilter()方法。 Kotlin将其视为在语法上等于名为varcolorFilter。因此,如果您有一个ColorFilter对象,则可以编写:

 mToolbar.overflowIcon?.colorFilter = myReallyCoolColorFilterNoReallyItAddsBlueTintToEverything

另一个setColorFilter()调用采用您指定的两个参数:color和PorterDuff.Mode。但是,该方法是setColorFilter(),而不是colorFilter()。因此,请切换到setColorFilter()或:
 mToolbar.overflowIcon?.colorFilter = BlendModeColorFilter(Color.RED, BlendMode.SRC_ATOP)

由于您正在尝试引用colorFilter,因此Kotlin假定您的意思是colorFilter属性,它不是函数类型,不能像一个函数类型那样调用。

10-08 12:32