用反射给toolbar空间里的mLogo设置点击事件
程序员文章站
2022-06-18 11:17:12
...
给这个图标设置点击事件,这个图标是一个Imagivew类型,放在一个toolbar里面,toolbar是一个viewgroup,直接得到这个view设置点击就可以本来,但是坑爹的是这个Imagivew在viewgroup中是一个私有类型,而且坑爹的谷歌没有给这个imagive设置get set方法。。。。。。
这样的话就只可以用反射调用了。。。。。
函数如下图。。。。。over
private void initListener() {
try {
Field field = toolbar.getClass().getDeclaredField("mLogoView");
field.setAccessible(true);
ImageView imageView = (ImageView) field.get(toolbar);
imageView.setTransitionName("SEIV");
imageView.setId(R.id.tool_bar_log);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Pair<View, String>[] pairs = new Pair[]{
Pair.create(mDrawerLayout.findViewById(R.id.tool_bar_log), "SEIV")};
ActivityOptionsCompat options = ActivityOptionsCompat
.makeSceneTransitionAnimation(AppLifeCircleUtil.activityStack.get(0), pairs);
ARouter.getInstance().build(ARouterPage.MYPAGE_ACTIVITY).withOptionsCompat(options)
.navigation(MainActivity.this);
}
});
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
ToastUtils.showLongToast("1");
e.printStackTrace();
}
}