程序运行后的效果如图所示:
MainActivity.java
/**
* 新建一个popupWindow弹出框 popupWindow是一个阻塞式的弹出框,这就意味着在我们退出这个弹出框之前,程序会一直等待,
* 这和AlertDialog不同哦,AlertDialog是非阻塞式弹出框,AlertDialog弹出的时候,后台可是还可以做其他事情的哦。
*/
public class MainActivity extends Activity {
private Button button;
// gridview中要显示的内容
private static final String[] textArrayUnite = {"所有","双色球","大乐透","竞彩足球","3D"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.this.showPopView();
}
});
}
/**
* 弹出popupwindow.
*/
private void showPopView() {
SelecteTypePopupWindow popupWindow = new SelecteTypePopupWindow(this, textArrayUnite);
popupWindow.init();
// 设置popupwindow显示在按钮组件下边
popupWindow.showAsDropDown(button, -50, -10);
}
}
SelecteTypePopupWindow.java
/**
* 自定义popupWindow
* @ClassName: SelecteTypePopupWindow
* @author lugq
* @date 2014年9月17日 下午2:20:13
*
*/
public class SelecteTypePopupWindow extends PopupWindow {
// 定义显示的popup显示几列内容
private int column = 3;
private String[] arr;
private Context context;
/**
* @param context
* @param str 弹出的popupwindow内需要显示的内容
*/
public SelecteTypePopupWindow(Context context, String[] arr) {
super(context);
this.context = context;
this.arr = arr;
}
/**
*
*/
public void init() {
// 弹框的布局
View waySwitchLayout = View.inflate(context, R.layout.pop_grid_view, null);
//加载弹框的布局
this.setContentView(waySwitchLayout);
// 设置弹框的背景颜色
this.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// 点击弹框外部,弹框消失
this.setOutsideTouchable(true);
// 获取焦点
this.setFocusable(true);
// 设置弹框的宽和高
this.setHeight(LayoutParams.WRAP_CONTENT);
this.setWidth(LayoutParams.WRAP_CONTENT);
PopupGridViewAdapter adapter = new PopupGridViewAdapter(context, arr);
GridView gridView = (GridView) waySwitchLayout.findViewById(R.id.menu_item_grid_view_holder);
gridView.setNumColumns(column);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(context, "点击了" + arr[position], Toast.LENGTH_LONG).show();
}
});
}
/**
* 放在gridView中的adapter.
* @ClassName: PopupGridViewAdapter
* @author lugq
* @date 2014年9月17日 下午3:24:58
*
*/
class PopupGridViewAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private int selectedTextColor;
private int notSelectedTextColor;
private String[] arr;
public PopupGridViewAdapter(Context context, String[] arr) {
this.context = context;
this.arr = arr;
inflater = LayoutInflater.from(this.context);
selectedTextColor = context.getResources().getColor(android.R.color.white);
notSelectedTextColor = android.R.color.darker_gray;
}
@Override
public int getCount() {
return arr.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.grid_view_item, null);
viewHolder.upTv = (TextView) convertView.findViewById(R.id.up_tv);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.upTv.setText(arr[position]);
return convertView;
}
public final class ViewHolder {
private TextView upTv;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/term_popup_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/pop_menu_bg"
android:gravity="bottom" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:padding="5dip"
>
<!-- android:stretchMode="columnWidth" 缩放与列宽大小同步 -->
<GridView
android:id="@+id/menu_item_grid_view_holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:listSelector="@android:color/transparent"
android:numColumns="4"
android:scrollbars="none"
android:stretchMode="columnWidth" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
activity_main.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" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textview1"
android:layout_centerHorizontal="true"
android:layout_marginTop="62dp"
android:text="点击弹出自定义PopupWindow框" />
</RelativeLayout>
grid_view_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/up_tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:singleLine="true"
android:textColor="@android:color/darker_gray"
android:textSize="16dp" />
</LinearLayout>