Custom Notification View

前端 未结 1 753
無奈伤痛
無奈伤痛 2021-02-02 17:49

I would like to create a notification icon view that looks similar to the Google+ app\'s notification. The difference will be that I need to be able to change the color at runti

1条回答
  •  囚心锁ツ
    2021-02-02 18:33

    I solved this by doing the following.

    Created this to make the rounded corner shape with a solid color. This also adds a translucent black to give it a pressed look against a blackground. res/drawable/shape_notification.xml

    
    
        
        
        
    
    

    The layer drawable will be used as the actual drawable on the action bar item. It has the background (written above) overlayed with the wrench icon. res/drawable/layer_customizer.xml

    
    
        
        
    
    

    Java code to change the color. The target view is the object that is assigned the layer_customizer drawable. The color passed in will change the shape_notification.xml's solid tag color.

    public static void setCustomizerDrawableColor(final View target, final int color) {
      final Drawable d = target.getDrawable();
      LayerDrawable layer = (LayerDrawable)d;
      GradientDrawable gradient = (GradientDrawable)layer.getDrawable(0);
      gradient.setColor(color);
      gradient.invalidateSelf();
      layer.invalidateSelf();
      target.invalidate();
    }
    

    Create a layout using these layers. res/layout/actionview_customizer.xml

    
    
    

    To get the custom layout to put into the ActionBar add this menu item into it: res/menu/actionbar_main.xml

    
    

    Then after loading the Action Bar use this code to get the handle to the button. This happens in your Activity.

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.actionbar_main, menu);
        final ActionBar actionBar = getActionBar();
        final MenuItem customizerItem = menu.findItem(R.id.MenuItemCustomize);
        View v = customizerItem.getActionView();
        customizerActionView = (ImageButton) v;
        customizerActionView.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                onOptionsItemSelected(customizerItem);
            }
        });
    }
    

    If you want to see the full source working together look at the app source code I use this in. http://code.google.com/p/motivatormaker-android/source/browse/MakeMotivator/src/com/futonredemption/makemotivator/activities/MainActivity.java

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