无法将颜色过滤器设置为工具栏中的溢出图标
Can't set color filter to overflow icon in Toolbar
为什么 Kotlin 不允许我对工具栏中的溢出图标应用滤色器?
Expression 'colorFilter' of type 'ColorFilter' cannot be invoked as a function. The function 'invoke()' is not found
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()
。
Drawable
上有两个 setColorFilter()
方法。
一个 ColorFilter
。匹配相应的 getColorFilter()
方法。 Kotlin 将这些视为在语法上等同于名为 colorFilter
的 var
。所以,如果你有一个 ColorFilter
对象,你可以写:
mToolbar.overflowIcon?.colorFilter = myReallyCoolColorFilterNoReallyItAddsBlueTintToEverything
另一个 setColorFilter()
调用采用您指定的两个参数:颜色和 PorterDuff.Mode
。但是,该方法是setColorFilter()
,而不是colorFilter()
。所以,要么切换到 setColorFilter()
要么:
mToolbar.overflowIcon?.colorFilter = BlendModeColorFilter(Color.RED, BlendMode.SRC_ATOP)
由于您尝试引用 colorFilter
,Kotlin 假设您指的是 colorFilter
属性,并且这不是函数类型,不能像函数类型那样调用。
为什么 Kotlin 不允许我对工具栏中的溢出图标应用滤色器?
Expression 'colorFilter' of type 'ColorFilter' cannot be invoked as a function. The function 'invoke()' is not found
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()
。
Drawable
上有两个 setColorFilter()
方法。
一个 ColorFilter
。匹配相应的 getColorFilter()
方法。 Kotlin 将这些视为在语法上等同于名为 colorFilter
的 var
。所以,如果你有一个 ColorFilter
对象,你可以写:
mToolbar.overflowIcon?.colorFilter = myReallyCoolColorFilterNoReallyItAddsBlueTintToEverything
另一个 setColorFilter()
调用采用您指定的两个参数:颜色和 PorterDuff.Mode
。但是,该方法是setColorFilter()
,而不是colorFilter()
。所以,要么切换到 setColorFilter()
要么:
mToolbar.overflowIcon?.colorFilter = BlendModeColorFilter(Color.RED, BlendMode.SRC_ATOP)
由于您尝试引用 colorFilter
,Kotlin 假设您指的是 colorFilter
属性,并且这不是函数类型,不能像函数类型那样调用。