更改菜单图标颜色

This commit is contained in:
GKF 2019-05-30 14:22:35 +08:00
parent 61a3224737
commit 5b5c660e02

View File

@ -1,9 +1,17 @@
package io.legado.app.base
import android.annotation.SuppressLint
import android.graphics.PorterDuff
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import io.legado.app.R
import io.legado.app.lib.theme.ColorUtil
import io.legado.app.lib.theme.MaterialValueHelper
import io.legado.app.lib.theme.ThemeStore
import java.util.*
abstract class BaseActivity<VM : ViewModel> : AppCompatActivity() {
@ -21,6 +29,52 @@ abstract class BaseActivity<VM : ViewModel> : AppCompatActivity() {
}
/**
* 设置MENU图标颜色
*/
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val primaryTextColor =
MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(ThemeStore.primaryColor(this)))
for (i in 0 until menu.size()) {
val drawable = menu.getItem(i).icon
if (drawable != null) {
drawable.mutate()
drawable.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_ATOP)
}
}
return super.onCreateOptionsMenu(menu)
}
@SuppressLint("PrivateApi")
override fun onMenuOpened(featureId: Int, menu: Menu?): Boolean {
if (menu != null) {
//展开菜单显示图标
if (menu.javaClass.simpleName.equals("MenuBuilder", ignoreCase = true)) {
try {
var method = menu.javaClass.getDeclaredMethod("setOptionalIconsVisible", java.lang.Boolean.TYPE)
method.isAccessible = true
method.invoke(menu, true)
method = menu.javaClass.getDeclaredMethod("getNonActionItems")
val menuItems = method.invoke(menu) as ArrayList<MenuItem>
if (!menuItems.isEmpty()) {
for (menuItem in menuItems) {
val drawable = menuItem.icon
if (drawable != null) {
drawable.mutate()
drawable.setColorFilter(
resources.getColor(R.color.tv_text_default),
PorterDuff.Mode.SRC_ATOP
)
}
}
}
} catch (ignored: Exception) {
}
}
}
return super.onMenuOpened(featureId, menu)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
item?.let {
if (it.itemId == android.R.id.home) {