工具栏徽标 ID
Toolbar Logo id
我对设置和配置工具栏徽标的不同属性很感兴趣,例如设置 Onclick 侦听器或使用 Picasso 下载并使用 "fit" picasso 的方法设置圆形图像。
为此,我需要工具栏徽标的 ID(注意,徽标,而不是 android.R.id.home 的导航图标)到 找到视图,因为收费栏没有任何获取ImageView的方法。
Toolbar
class 似乎动态创建其子 View
,所以我相信我们必须自己搜索徽标的 View
。在您设置徽标之后,但在添加任何其他徽标之前(如果确实如此),徽标是 Toolbar
的唯一 ImageView
子项,我们可以这样得到:
private ImageView getLogoView(Toolbar toolbar) {
for (int i = 0; i < toolbar.getChildCount(); i++)
if(toolbar.getChildAt(i) instanceof ImageView)
return (ImageView) toolbar.getChildAt(i);
return null;
}
另一种可能性是在 Toolbar
class 上使用反射。此方法设置好logo后随时可以使用
private ImageView getLogoView(Toolbar toolbar) {
try {
Class<?> toolbarClass = Toolbar.class;
Field logoViewField = toolbarClass.getDeclaredField("mLogoView");
logoViewField.setAccessible(true);
ImageView logoView = (ImageView) logoViewField.get(toolbar);
return logoView;
}
catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
我对设置和配置工具栏徽标的不同属性很感兴趣,例如设置 Onclick 侦听器或使用 Picasso 下载并使用 "fit" picasso 的方法设置圆形图像。
为此,我需要工具栏徽标的 ID(注意,徽标,而不是 android.R.id.home 的导航图标)到 找到视图,因为收费栏没有任何获取ImageView的方法。
Toolbar
class 似乎动态创建其子 View
,所以我相信我们必须自己搜索徽标的 View
。在您设置徽标之后,但在添加任何其他徽标之前(如果确实如此),徽标是 Toolbar
的唯一 ImageView
子项,我们可以这样得到:
private ImageView getLogoView(Toolbar toolbar) {
for (int i = 0; i < toolbar.getChildCount(); i++)
if(toolbar.getChildAt(i) instanceof ImageView)
return (ImageView) toolbar.getChildAt(i);
return null;
}
另一种可能性是在 Toolbar
class 上使用反射。此方法设置好logo后随时可以使用
private ImageView getLogoView(Toolbar toolbar) {
try {
Class<?> toolbarClass = Toolbar.class;
Field logoViewField = toolbarClass.getDeclaredField("mLogoView");
logoViewField.setAccessible(true);
ImageView logoView = (ImageView) logoViewField.get(toolbar);
return logoView;
}
catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}