出现问题的情况是在开启混淆后,被收纳的menu的图标都不显示
网上大多数都是设定反射来显示,
/**
* 解决不显示menu icon的问题
* @param menu:Menu对象
* @param flag:默认设置为true即可
*/
private fun setIconsVisible(menu: Menu, flag: Boolean) {
if (menu.javaClass.simpleName.equals("MenuBuilder", ignoreCase = true)) {
try {
val method: Method = menu.javaClass.getDeclaredMethod(
"setOptionalIconsVisible", java.lang.Boolean.TYPE
)
method.isAccessible = true
method.invoke(menu, flag)
} catch (e: Exception) {
Toast.makeText( this,
"1111111",
Toast.LENGTH_SHORT
).show()
e.printStackTrace()
}
}
但是混淆后,反射是找不到对应的方法,因此针对反射就可以指定具体类保持不被反射,详细可以参考网上对于反射配置的文章
但是!由于compact的版本问题,忽略相关的反射文件仍旧会出现icon不显示的问题
解决方案如下,由于我的Menu实在fragment中进行管理的, 可以尝试一下
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
this.menu = menu
//填充视图
menuInflater.inflate(R.menu.menu_scenario_fragment, menu)
//设定icon显示
if (menu is MenuBuilder) {
menu.setOptionalIconsVisible(true)
}
}