Is toolbar's logo icon clickable?

后端 未结 3 1168
既然无缘
既然无缘 2020-12-19 06:27

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 to         


        
相关标签:
3条回答
  • 2020-12-19 06:40

    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;
        }
    
    0 讨论(0)
  • 2020-12-19 06:45

    I was asking myself the same question and came across this. I took a similar approach to Nikola Despotoski but with a different implementation.

    Instead of the method, what I did was:

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

    Slightly hack-ish, but will come back review it a bit later. Sharing for discussion purposes.

    0 讨论(0)
  • 2020-12-19 06:52

    Long-click event behavior for the appcompat:V7 ActionBar's logo view (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();
            }
        }
    

    tested only android 7.0

    0 讨论(0)
提交回复
热议问题