工具栏的徽标图标是否可点击?

我已经使用了工具栏,所以现在我想在logo图标上应用点击事件我怎么能得到这个活动?

这是我做过的一些编码

Toolbar toolbar = null; toolbar = (Toolbar) findViewById(R.id.actionToolbar); setSupportActionBar(toolbar); setTitle(null); toolbar.setNavigationIcon(R.drawable.back); toolbar.setNavigationContentDescription("BACK"); toolbar.setLogo(R.drawable.ic_launcher); toolbar.setLogoDescription("LOGO"); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Nav", Toast.LENGTH_SHORT).show(); } }); 

在这里,我设置了导航图标和徽标图标,所以现在我想要徽标图标的点击事件,怎么可能?

你需要首先参考它

 View logoView = getToolbarLogoView(toolbar); logoView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //logo clicked } }); 

使用内容描述我们可以获得View参考。 请参阅内联评论。

 public static View getToolbarLogoIcon(Toolbar toolbar){ //check if contentDescription previously was set boolean hadContentDescription = android.text.TextUtils.isEmpty(toolbar.getLogoDescription()); String contentDescription = String.valueOf(!hadContentDescription ? toolbar.getLogoDescription() : "logoContentDescription"); toolbar.setLogoDescription(contentDescription); ArrayList potentialViews = new ArrayList(); //find the view based on it's content description, set programatically or with android:contentDescription toolbar.findViewsWithText(potentialViews,contentDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); //Nav icon is always instantiated at this point because calling setLogoDescription ensures its existence View logoIcon = null; if(potentialViews.size() > 0){ logoIcon = potentialViews.get(0); } //Clear content description if not previously present if(hadContentDescription) toolbar.setLogoDescription(null); return logoIcon; } 

我问自己同样的问题并且遇到了这个问题。 我对Nikola Despotoski采取了类似的方法,但采用了不同的实现方式。

而不是方法,我做的是:

 // Set drawable toolbar.setLogo(ContextCompat.getDrawable(context, R.drawable.logo)); // Find logo View view = toolbar.getChildAt(1); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Perform actions } }); 

稍微破解,但稍后会再回顾一下。 分享用于讨论目的。

appcompat的长按事件行为:V7 ActionBar的徽标视图(ImageView)

  ActionBar actionBar = getSupportActionBar(); actionBar.setLogo(R.drawable.logo_vjet); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayShowHomeEnabled(true); actionBar.setDisplayUseLogoEnabled(true); //find ActionBar View(ToolBar) View view = getWindow().getDecorView().findViewById(android.support.v7.appcompat.R.id.action_bar); if(view != null && view instanceof Toolbar){ try { //find ImageView mLogoView; in Toolbar using reflect Field logoView = view.getClass().getDeclaredField("mLogoView"); logoView.setAccessible(true); ImageView logoImageVIew = (ImageView) logoView.get(view); if(logoImageVIew != null){ logoImageVIew.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { //do something return false; } }); } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } 

仅测试了android 7.0