MainActivity:
package tech.androidstudio.popupwindowsimpledemo;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ListView mListView;
private ArrayList<SubItem> subItems;
//首先是创建一个listView ,这里面的内容是包含了一个listView的类的列表
//然后给这个添加popupwindow,在onItemClick的回调里面。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView)findViewById(R.id.listView);
subItems = new ArrayList<SubItem>();
for (int i = 0; i < 5; i++) {
ArrayList<String> data = new ArrayList<String>();
for (int j = 0; j < 6; j++) {
data.add(new String(i+"子项目"+j));
}
SubItem subItem = new SubItem("主项目"+i,data);
subItems.add(subItem);
}
SubItemAdapter adapter = new SubItemAdapter(subItems);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
PopupWindow popupWindow = new PopupWindow(this);
//代码创建一个subListView
ListView subListView = new ListView(this);
subListView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
ArrayList<String> subList= new ArrayList<String>();
subList=subItems.get(position).getSubList();
ArrayAdapter<String> subAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,subList);
subListView.setAdapter(subAdapter);
//这步很重要
popupWindow.setContentView(subListView);
//设置这个宽度和高度和上一保持一直
popupWindow.setHeight(view.getHeight());
popupWindow.setWidth(view.getWidth());
popupWindow.setTouchable(true);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
//通过getLocationOnScreen来获取view在屏幕中的位置
int[] location = new int[2];
view.getLocationOnScreen(location);
//上方:popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1]-popupWindow.getHeight());
//左边:popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0]-popupWindow.getWidth(), location[1]);
//右边: popupWindow.showAtLocation(mListView, Gravity.NO_GRAVITY,width,location[1]);
popupWindow.showAtLocation(view, Gravity.NO_GRAVITY,location[0]+view.getWidth(),location[1]);
}
public class SubItem{
private String name;
private ArrayList<String> subList;
public SubItem(String name, ArrayList<String> subList) {
this.name = name;
this.subList = subList;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList<String> getSubList() {
return subList;
}
public void setSubList(ArrayList<String> subList) {
this.subList = subList;
}
}
public class SubItemAdapter extends BaseAdapter {
ArrayList<SubItem> subItems = new ArrayList<SubItem>();
public SubItemAdapter(ArrayList<SubItem> subItems) {
this.subItems = subItems;
}
@Override
public int getCount() {
return subItems.size();
}
@Override
public Object getItem(int position) {
return subItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View ret = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_listview, parent, false);
TextView tv = (TextView)ret.findViewById(R.id.text1);
tv.setText(subItems.get(position).getName());
return ret;
}
}
}
activity_main.xml
<?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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ListView android:text="Hello World!" android:layout_width="158dp"
android:layout_height="wrap_content"
android:id="@+id/listView"/>
</RelativeLayout>
item_listview.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_width="158dp" android:layout_height="50dp" android:id="@+id/text1"/> </LinearLayout>
简单的popupWindow的demo
Popupwindow的动画的设置