Add Context Menu Icon in android

前端 未结 5 1075
时光说笑
时光说笑 2020-12-14 19:15

I have a Listview with a ContextMenu, but when I setIcon for ContextMenu look like it doesn\'t work

public void onCreateContextMenu(ContextMenu menu , View v         


        
5条回答
  •  青春惊慌失措
    2020-12-14 19:53

    While the API doesn't support icons in Context Menu, but we can always fake it by inflating a Dialog with our own view that looks like context menu.

    Copy-pasting the following files exactly will do the job:

    MainActivity.java

    public class MainActivity extends Activity {
    
    List contextMenuItems;
    Dialog customDialog;
    
    LayoutInflater inflater;
    View child;
    ListView listView;
    ContextMenuAdapter adapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        inflater = (LayoutInflater) this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        child = inflater.inflate(R.layout.listview_context_menu, null);
        listView = (ListView) child.findViewById(R.id.listView_context_menu);
    
        contextMenuItems = new ArrayList();
        contextMenuItems.add(new ContextMenuItem(getResources().getDrawable(
                R.drawable.ic_launcher), "Facebook"));
        contextMenuItems.add(new ContextMenuItem(getResources().getDrawable(
                R.drawable.ic_launcher), "Scanner"));
    
        adapter = new ContextMenuAdapter(this,
                contextMenuItems);
        listView.setAdapter(adapter);
    
                listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View v,
                    int position, long id) {
                customDialog.dismiss();
                if (position == 0)
                    Toast.makeText(MainActivity.this, "00", Toast.LENGTH_SHORT)
                            .show();
    
                if (position == 1)
                    Toast.makeText(MainActivity.this, "11", Toast.LENGTH_SHORT)
                            .show();
    
            }
        });
    
        customDialog = new Dialog(this);
        customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        customDialog.setContentView(child);
        customDialog.show();
        }
    
    }
    

    ContextMenuItem.java

    public class ContextMenuItem {
    
    Drawable drawable;
    String text;
    
    public ContextMenuItem(Drawable drawable, String text) {
        super();
        this.drawable = drawable;
        this.text = text;
    }
    
    public Drawable getDrawable() {
        return drawable;
    }
    
    public void setDrawable(Drawable drawable) {
        this.drawable = drawable;
    }
    
    public String getText() {
        return text;
    }
    
    public void setText(String text) {
        this.text = text;
    }
    
    }
    

    ContextMenuAdapter.java

    public class ContextMenuAdapter extends BaseAdapter {
    Context context;
    List listContextMenuItems;
    LayoutInflater inflater;
    
    public ContextMenuAdapter(Context context,
            List listContextMenuItems) {
        super();
        this.context = context;
        this.listContextMenuItems = listContextMenuItems;
    }
    
    static class ViewHolder {
        protected ImageView imageView;
        protected TextView textView;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            viewHolder = new ViewHolder();
            convertView = inflater.inflate(R.layout.context_menu_item, parent,
                    false);
            viewHolder.imageView = (ImageView) convertView
                    .findViewById(R.id.imageView_menu);
            viewHolder.textView = (TextView) convertView
                    .findViewById(R.id.textView_menu);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
    
        viewHolder.imageView.setImageDrawable(listContextMenuItems
                .get(position).getDrawable());
        viewHolder.textView.setText(listContextMenuItems.get(position)
                .getText());
        return convertView;
    
    }
    
    @Override
    public int getCount() {
        return listContextMenuItems.size();
    }
    
    @Override
    public Object getItem(int position) {
        return null;
    }
    
    @Override
    public long getItemId(int position) {
        return 0;
    }
    
    }
    

    context_menu_item.xml

    
    
    
    
    
    
    
    
    

    listview_context_menu.xml

    
    
    

提交回复
热议问题