PopupWindow

示例demo

main.xml布局代码:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:layout_height="match_parent"
 4     android:orientation="vertical" >
 5 
 6     <Button
 7         android:layout_width="wrap_content"
 8         android:layout_height="wrap_content"
 9         android:onClick="show"
10         android:text="显示" />
11 
12 </LinearLayout>

gridview的布局代码

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" 
 6     android:background="@drawable/bg">
 7 
 8     <GridView
 9         android:id="@+id/gv"
10         android:layout_width="match_parent"
11         android:layout_height="wrap_content"
12         android:numColumns="4" 
13         android:horizontalSpacing="2dip"
14         android:verticalSpacing="2dip">
15         
16     </GridView>
17 
18 </LinearLayout>

gridview渐变色背景

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
 3     android:shape="rectangle">
 4     
 5     <gradient 
 6         android:startColor="#5FF2FA"
 7         android:endColor="#4BED23"
 8         />
 9     
10 
11 </shape>

item布局

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <ImageView
 8         android:id="@+id/iv"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_gravity="center"
12         android:src="@drawable/i1" />
13 
14     <TextView
15         android:id="@+id/tv"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:layout_gravity="center"
19         android:layout_marginTop="5dip"
20         android:text="搜索"
21         android:textColor="#f00" />
22 
23 </LinearLayout>

Acitivity代码:

  1 package com.android.hzy.popupwindow;
  2 
  3 import android.app.Activity;
  4 import android.graphics.drawable.BitmapDrawable;
  5 import android.os.Bundle;
  6 import android.view.Gravity;
  7 import android.view.LayoutInflater;
  8 import android.view.View;
  9 import android.view.ViewGroup;
 10 import android.widget.AdapterView;
 11 import android.widget.AdapterView.OnItemClickListener;
 12 import android.widget.BaseAdapter;
 13 import android.widget.GridView;
 14 import android.widget.ImageView;
 15 import android.widget.PopupWindow;
 16 import android.widget.TextView;
 17 
 18 public class MainActivity extends Activity {
 19 
 20     private PopupWindow mPopupWindow;
 21     private LayoutInflater mInflater;
 22 
 23     @Override
 24     protected void onCreate(Bundle savedInstanceState) {
 25         super.onCreate(savedInstanceState);
 26         setContentView(R.layout.activity_main);
 27 
 28         mInflater = LayoutInflater.from(getApplicationContext());
 29     }
 30 
 31     public void show(View v) {
 32         View contentView = mInflater.inflate(R.layout.popupwindow, null);
 33         GridView gv = (GridView) contentView.findViewById(R.id.gv);
 34         gv.setAdapter(new MyAdapter());
 35         gv.setOnItemClickListener(new MyOnItemClickListener());
 36         
 37         mPopupWindow = new PopupWindow(contentView,
 38                 ViewGroup.LayoutParams.MATCH_PARENT,
 39                 ViewGroup.LayoutParams.WRAP_CONTENT);
 40         
 41         // 如果需要点击其他的地方 popupwindow自动消失:1.popupwindow必须指定背景   2.popupwindow必须获取焦点
 42         mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
 43         mPopupWindow.setFocusable(true);
 44         
 45         // 显示popupwindow窗口
 46 //        mPopupWindow.showAsDropDown(v); // 显示在按钮下方
 47         mPopupWindow.showAtLocation((View)v.getParent(), Gravity.BOTTOM, 0, 0);// 显示在屏幕下方 
 48     }
 49     
 50     private final class MyOnItemClickListener implements OnItemClickListener{
 51 
 52         @Override
 53         public void onItemClick(AdapterView<?> parent, View view, int position,
 54                 long id) {
 55             // TODO Auto-generated method stub
 56             mPopupWindow.dismiss();
 57         }
 58         
 59     }
 60 
 61     public final class MyAdapter extends BaseAdapter {
 62 
 63         private int[] images = new int[] { R.drawable.i1, R.drawable.i2,
 64                 R.drawable.i3, R.drawable.i4, R.drawable.i5, R.drawable.i6,
 65                 R.drawable.i7, R.drawable.i8 };
 66         
 67         private String[] names = new String[] { "搜索", "文件管理", "下载管理", "全屏",
 68                 "网址", "书签", "加入书签", "页面分享" };
 69 
 70         @Override
 71         public int getCount() {
 72             // TODO Auto-generated method stub
 73             return images.length;
 74         }
 75 
 76         @Override
 77         public Object getItem(int position) {
 78             // TODO Auto-generated method stub
 79             return names[position];
 80         }
 81 
 82         @Override
 83         public long getItemId(int position) {
 84             // TODO Auto-generated method stub
 85             return position;
 86         }
 87 
 88         @Override
 89         public View getView(int position, View convertView, ViewGroup parent) {
 90             // TODO Auto-generated method stub
 91             View view = mInflater.inflate(R.layout.item, null);
 92             
 93             ImageView iv = (ImageView) view.findViewById(R.id.iv);
 94             TextView tv = (TextView) view.findViewById(R.id.tv);
 95             
 96             iv.setImageResource(images[position]);
 97             tv.setText(names[position]);
 98             return view;
 99         }
100 
101     }
102 }
原文地址:https://www.cnblogs.com/androidez/p/2956549.html