1、主Activity
package com.example.popwindowwithspinner;
import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.Toast;
public class PopWindowSpinnerActivity extends Activity {
private Resources resourceGrid;
//下拉按钮
Button MyButton;
//PopupWindow对象声明
PopupWindow pw;
ArrayList<ViewMode> viewModeList;
//当前选中的列表项位置
int clickPsition = -1;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pop_window);
MyButton = (Button) findViewById(R.id.myButton);
resourceGrid = getResources();
//获得要显示的数据
viewModeList = getList();
MyButton.setBackground(resourceGrid.getDrawable(R.drawable.listview));
MyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//通过布局注入器,注入布局给View对象
View myView = getLayoutInflater().inflate(R.layout.pop, null);
//通过view 和宽·高,构造PopopWindow
pw = new PopupWindow(myView, 440, 205, true);
pw.setBackgroundDrawable(getResources().getDrawable(
//此处为popwindow 设置背景,同事做到点击外部区域,popwindow消失
R.drawable.diaolog_bg));
//设置焦点为可点击
pw.setFocusable(true);//可以试试设为false的结果
//将window视图显示在myButton下面
//pw.showAsDropDown(MyButton);
pw.showAsDropDown(MyButton, 9, -10);
ListView lv = (ListView) myView.findViewById(R.id.lv_pop);
lv.setAdapter(new ListViewAdapter(PopWindowSpinnerActivity.this, viewModeList));
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
ViewMode viewMode = viewModeList.get(position);
MyButton.setBackground(viewMode.getViewModeIcon());
pw.dismiss();
}
});
}
});
}
/**
* 得到list集合的方法
* @return
*/
public ArrayList<ViewMode> getList() {
ArrayList<ViewMode> list = new ArrayList<ViewMode>();
Drawable drawable =null;
drawable = resourceGrid.getDrawable(R.drawable.listview);
ViewMode viewMode =new ViewMode(drawable, "listview");
list.add(viewMode);
drawable = resourceGrid.getDrawable(R.drawable.gridview);
viewMode =new ViewMode(drawable, "gridview");
list.add(viewMode);
return list;
}
}
(1)声明对象
PopupWindow pw;
(2)核心代码
//通过布局注入器,注入布局给View对象
View myView = getLayoutInflater().inflate(R.layout.pop, null);
//通过view 和宽·高,构造PopopWindow
pw = new PopupWindow(myView, 440, 205, true);
pw.setBackgroundDrawable(getResources().getDrawable(
//此处为popwindow 设置背景,同事做到点击外部区域,popwindow消失
R.drawable.diaolog_bg));
//设置焦点为可点击
pw.setFocusable(true);//可以试试设为false的结果
//将window视图显示在myButton下面
//pw.showAsDropDown(MyButton);
pw.showAsDropDown(MyButton, 9, -10);
2、ListViewAdapter.java
package com.example.popwindowwithspinner;
import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ListViewAdapter extends BaseAdapter{
private LayoutInflater inflater;
private ArrayList<String> list;
private ArrayList<ViewMode> viewModeList;
private ViewHolder viewHolder;
public ListViewAdapter(Context context,ArrayList<ViewMode> viewModeList){
super();
<span style="white-space:pre"> </span>this.inflater = LayoutInflater.from(context);
this.viewModeList = viewModeList;
}
@Override
public int getCount() {
return viewModeList.size();
}
@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;
}
@SuppressLint("NewApi")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.lv_items, null);
viewHolder = new ViewHolder();
viewHolder.imageView =(ImageView)convertView.findViewById(R.id.img);
viewHolder.textView =(TextView)convertView.findViewById(R.id.text);
convertView.setTag(viewHolder);
}else
viewHolder = (ViewHolder)convertView.getTag();
ViewMode viewMode = viewModeList.get(position);
viewHolder.imageView.setBackground(viewMode.getViewModeIcon());
viewHolder.textView.setText(viewMode.getViewModeNote());
return convertView;
}
private final class ViewHolder{
private ImageView imageView;
private TextView textView;
}
}
(1)
private final class ViewHolder{
private ImageView imageView;
private TextView textView;
}
<span style="white-space:pre"> </span>viewHolder = new ViewHolder();
viewHolder.imageView =(ImageView)convertView.findViewById(R.id.img);
viewHolder.textView =(TextView)convertView.findViewById(R.id.text);
convertView.setTag(viewHolder);
创建一个类来记住这些XML标记,这样就省得每次去解析XML文件,毕竟XML文件解析还是有点耗时的
(2)
convertView = inflater.inflate(R.layout.lv_items, null);
构造listview的item的view
3、viewmode.java
package com.example.popwindowwithspinner;
import android.graphics.drawable.Drawable;
public class ViewMode {
private Drawable viewModeIcon;
private String viewModeNote;
public ViewMode(Drawable viewModeIcon,String viewModeNote){
this.viewModeIcon=viewModeIcon;
this.viewModeNote=viewModeNote;
}
public void setViewModeIcon(Drawable viewModeIcon){
this.viewModeIcon=viewModeIcon;
}
public void setViewModeNote(String viewModeNote){
this.viewModeNote=viewModeNote;
}
public Drawable getViewModeIcon(){
return this.viewModeIcon;
}
public String getViewModeNote(){
return this.viewModeNote;
}
}
4、主XML文件,主要只是一个button
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#fff"
android:orientation="vertical" >
<Button
android:paddingLeft="5dp"
android:id="@+id/myButton"
android:gravity="center_vertical"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:textColor="#000" />
</LinearLayout>
5、popwindow弹出来的内容XML文件,就是弹出一个listview
<?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:orientation="vertical"
android:paddingTop="0dp" >
<ListView
android:id="@+id/lv_pop"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
6、最后是listview的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:orientation="horizontal" >
<ImageView
android:id="@+id/img"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="2dp"
android:layout_gravity="center_vertical" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:textColor="#000" />
</LinearLayout>
</LinearLayout>