弹出式菜单PopMenu
MainActivity.java
public class MainActivity extends Activity implements OnClickListener{ private PopMenu popMenu; private Context context; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); context = MainActivity.this; button=(Button)findViewById(R.id.bt); button.setOnClickListener(this); popMenu = new PopMenu(context); popMenu.setOnItemClickListener( new OnItemClickListener() {//每个条目的点击事件 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //每个条目的点击响应事件 popMenu.dismiss(); } } ); } // 弹出菜单监听器 @Override public void onClick(View v) { popMenu.showAsDropDown(v); } }
PopMenu.java
public class PopMenu { private ArrayList<String> itemListStr ; private ArrayList<Integer> itemListInt; private Context context; private PopupWindow popupWindow; private ListView listView; public PopMenu(Context context) { this.context = context; itemListStr = new ArrayList<String>(); itemListInt=new ArrayList<Integer>(); String[] str=new String[]{"你好", "我好", "大家好", "哈哈"}; int[] i=new int[]{R.drawable.picture0,R.drawable.picture1,R.drawable.picture2,R.drawable.picture3}; for(String s:str){ itemListStr.add(s); } for(int img:i){ Integer listImgInteger=Integer.valueOf(img);//int-->Integer itemListInt.add(listImgInteger); } Log.i("Tag","itemListStr______"+itemListStr); Log.i("Tag","itemListInt________"+itemListInt); View view = LayoutInflater.from(context).inflate(R.layout.poplist, null);//PopupWindow里面的view listView = (ListView) view.findViewById(R.id.menu_listview); listView.setAdapter(new PopMenuAdapter(context,itemListStr,itemListInt)); listView.setFocusableInTouchMode(true); listView.setFocusable(true); popupWindow = new PopupWindow(view, 300, LayoutParams.WRAP_CONTENT); popupWindow.setBackgroundDrawable(new BitmapDrawable()); // 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景(很神奇的), } // 设置每个条目击监听事件,前面会调用这个方法 public void setOnItemClickListener(OnItemClickListener listener) { listView.setOnItemClickListener(listener); } // 下拉式 弹出 pop菜单 parent 右下角 public void showAsDropDown(View parent) { popupWindow.showAsDropDown(parent,-150,0);//showAsDropDown(View anchor, int xoff, int yoff)弹出对话框,位置在紧挨着view组件,x y 代表着偏移量 popupWindow.setFocusable(true);//必须要获得焦点哦,不然里面的控件啥的点击无效的哦 popupWindow.setOutsideTouchable(true);// 设置允许在外点击消失 popupWindow.update(); // 刷新状态 } // 隐藏菜单 public void dismiss() { popupWindow.dismiss(); } }PopMenuAdapter.java
public class PopMenuAdapter extends BaseAdapter { ArrayList<String> itemListS; ArrayList<Integer> itemListI; Context mcon; public PopMenuAdapter(Context mcon,ArrayList<String> itemListStr,ArrayList<Integer> itemListImg){ this.mcon=mcon; this.itemListS=itemListStr; this.itemListI=itemListImg; } @Override public int getCount() { return itemListS.size(); } @Override public Object getItem(int position) { return itemListS.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from(mcon).inflate(R.layout.showpoplist, null); holder = new ViewHolder(); holder.imageView = (ImageView) convertView.findViewById(R.id.img); holder.groupItem = (TextView) convertView.findViewById(R.id.textview); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.imageView.setBackgroundResource(itemListI.get(position).intValue());//Integer-->int holder.groupItem.setText(itemListS.get(position)); Log.i("Tag","itemListS.get(position)~~~~~~"+itemListS.get(position)); Log.i("Tag","itemListI.get(position).intValue()~~~~~"+itemListI.get(position).intValue()); return convertView; } private final class ViewHolder { ImageView imageView; TextView groupItem; } }
两个布局文件,一个是PopMenu的填充的view,里面就是ListView;另一个布局文件是ListView每个条目的布局。
poplist.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:paddingLeft="20dip" android:gravity="right" android:id="@+id/hotalk_menu_view_layout" > <!-- 显示的listview --> <ListView android:id="@+id/menu_listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:focusable="true" android:longClickable="true" android:scrollbarSize="0sp" android:scrollbarStyle="insideOverlay" android:background="@drawable/menubg" android:divider="@drawable/group_divider" android:dividerHeight="1px" android:cacheColorHint="#00000000"> </ListView> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <!-- 显示内容 ,每个条目--> <ImageView android:id="@+id/img" android:layout_width="60dp" android:layout_height="40dp" android:layout_alignParentLeft="true" /> <TextView android:id="@+id/textview" android:layout_width="200dp" android:layout_height="wrap_content" android:gravity="center_vertical" android:layout_toRightOf="@id/img" android:layout_alignBottom="@id/img" android:textSize="25sp" android:textColor="#FF33CC" /> </RelativeLayout>