弹出式菜单PopMenu_android弹出式菜单PopMenu_android_02

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>