Android Action bar custom dropdown view on item click

前端 未结 1 1657
萌比男神i
萌比男神i 2020-12-12 22:59

I\'m writing an Android app for tablets. I\'ve gone with the action bar to create my icons. However, I need to open a custom view when one of the menu items is clicked.

相关标签:
1条回答
  • 2020-12-12 23:35

    Ok I worked out a solution myself. Basically the actionProviderClass is used to instantiate an actionView in the actionBar. In this class you can attach an onClick listener to the view you inflate. I used this listener to inflate a dropdown view in the main frame when clicked.

    For instance

    public class BaseProvider extends ActionProvider {
    
        protected final Context context;
        protected final int layout;
        protected final BaseProvider self;
        protected View view;
        protected int positionLeft = 0;
        protected Dropdown dropdown;
    
        public BaseProvider(Context context, int layout, Dropdown dropdown) {
            super(context);
            this.layout = layout;
            this.context = context;
            this.self = this;
            this.dropdown = dropdown;
        }
    
        @Override
        public View onCreateActionView() {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
    
            View view = inflater.inflate(this.layout, null);
    
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    self.onItemClick();
                }
            });
            this.view = view;
            return view;
        }
    
        public boolean onItemClick(){
            toggleDropdown();
            return true;
        }
    
        protected void toggleDropdown(){
            this.positionLeft = getRelativeLeft(view);
            DropdownInflater.getInstance().toggleDropdown(this.dropdown,this.positionLeft);
        }
    
        protected int getRelativeLeft(View view) {
            int[] loc = new int[2];
            view.getLocationOnScreen(loc);
            return loc[0];
        }
    }
    
    0 讨论(0)
提交回复
热议问题