弹出式菜单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>



posted @ 2013-12-17 17:04  IT专业户  阅读(483)  评论(0编辑  收藏  举报