MainActivity
package com.example.administrator.textexample; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.GridView; import android.widget.PopupWindow; import java.util.List; import java.util.Map; public class MySelectpoupwindow extends PopupWindow { private MySelectAdapter heroAdapter; public MySelectpoupwindow(Context context, List<Map<String, String>> list, final HeroSelectListener eventListener) { // 下拉框的宽高 this.setWidth(WindowManager.LayoutParams.MATCH_PARENT); this.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); // 外边界面是否可以点击 this.setOutsideTouchable(true); View view = LayoutInflater.from(context).inflate(R.layout.my_select_layout, null); setContentView(view); heroAdapter = new MySelectAdapter(context, list); heroAdapter.setListener(new MySelectAdapter.ItemListener() { @Override public void itemListener(int position) { // 回调 eventListener.click(position); heroAdapter.setClickitem(position); } }); GridView selectGrid = (GridView) view.findViewById(R.id.hero_select_grid); selectGrid.setAdapter(heroAdapter); if(list != null && list.size() > 0){ heroAdapter.setClickitem(0); } // 外边界面点击后关闭下拉框 View overlayView = view.findViewById(R.id.hero_select_overlay); overlayView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); } public interface HeroSelectListener { void click(int i); } }MySelectpoupwindow
package com.example.administrator.textexample; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.GridView; import android.widget.PopupWindow; import java.util.List; import java.util.Map; public class MySelectpoupwindow extends PopupWindow { private MySelectAdapter heroAdapter; public MySelectpoupwindow(Context context, List<Map<String, String>> list, final HeroSelectListener eventListener) { // 下拉框的宽高 this.setWidth(WindowManager.LayoutParams.MATCH_PARENT); this.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); // 外边界面是否可以点击 this.setOutsideTouchable(true); View view = LayoutInflater.from(context).inflate(R.layout.my_select_layout, null); setContentView(view); heroAdapter = new MySelectAdapter(context, list); heroAdapter.setListener(new MySelectAdapter.ItemListener() { @Override public void itemListener(int position) { // 回调 eventListener.click(position); heroAdapter.setClickitem(position); } }); GridView selectGrid = (GridView) view.findViewById(R.id.hero_select_grid); selectGrid.setAdapter(heroAdapter); if(list != null && list.size() > 0){ heroAdapter.setClickitem(0); } // 外边界面点击后关闭下拉框 View overlayView = view.findViewById(R.id.hero_select_overlay); overlayView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); } public interface HeroSelectListener { void click(int i); } }MySelectAdapter
package com.example.administrator.textexample; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; import java.util.Map; public class MySelectAdapter extends BaseAdapter { private Context context; private List<Map<String, String>> mlist; private int clickitem = -1; public MySelectAdapter(Context context, List<Map<String, String>> list) { this.context = context; this.mlist = list; } @Override public int getCount() { return mlist.size(); } public void setClickitem(int position) { this.clickitem = position; } @Override public Object getItem(int position) { return mlist.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { viewHolder vh; if (null == convertView) { vh = new viewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.my_select_item, parent, false); vh.tv = (TextView) convertView.findViewById(R.id.heroselect_tv); convertView.setTag(vh); } else { vh = (viewHolder) convertView.getTag(); } String name = mlist.get(position).get("name"); vh.tv.setText(name); final int pos = position; if (listener != null) { vh.tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 回调 listener.itemListener(pos); } }); } return convertView; } public class viewHolder { TextView tv; } public interface ItemListener { void itemListener(int position); } public ItemListener listener; public void setListener(ItemListener listener) { this.listener = listener; } }activity_main
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.textexample.MainActivity"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="下拉窗口" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="30dp" android:layout_above="@+id/showText" android:layout_marginBottom="20dp" android:text="下拉框点击的内容"/> <TextView android:id="@+id/showText" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="30dp" android:layout_centerInParent="true"/> </RelativeLayout>my_select_layout
<?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:orientation="vertical"> <GridView android:id="@+id/hero_select_grid" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:horizontalSpacing="9dp" android:numColumns="4" android:paddingBottom="10dp" android:paddingLeft="9dp" android:paddingRight="9dp" android:paddingTop="10dp" android:verticalSpacing="9dp"> </GridView> <View android:id="@+id/hero_select_overlay" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>my_select_item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/heroselect_tv" android:gravity = "center" android:textSize = "15dp" android:layout_width="76dp" android:layout_height="31dp" tools:text="射手" /> </LinearLayout>