Search code examples
androidandroid-actionbartoolbarandroid-5.0-lollipop

Is toolbar's logo icon clickable?


i have used toolbar so now i want to apply click event over logo icon how can i get this event?

here is some coding stuff that i have done

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();
    }
});

Here i have set navigation icon and logo icon so now i want logo icon's click event, how it is possible?


Solution

  • You need to get first reference of it

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

    Using content description we can get View reference. See the comments inline.

    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<View> potentialViews = new ArrayList<View>();
            //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;
        }