在Android中使用PopupWindow并不复杂,先看效果图,我们要点击按钮后让PopupWindow弹出来,PopupWindow中是一个ListView,效果图如下:
下面是代码:
package com.example.testpopupwindow;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.graphics.drawable.PaintDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;
public class MainActivity extends Activity {
private PopupWindow popWin;
private List<String> strs = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//为ListView添加数据
for(int i =0; i < 10; i++){
strs.add("item " + i);
}
popWin = new PopupWindow(this);
//获取popWin要显示的布局
View contentView = LayoutInflater.from(this).inflate(R.layout.pop_win_layout, null);
ListView listView = (ListView) contentView.findViewById(R.id.pop_win_listview);
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strs));
//为popWin设置布局
popWin.setContentView(contentView);
//不指定popWin的大小就无法显示popWin
popWin.setWidth(300);
popWin.setHeight(500);
//加上下面三句就可以在popWin外点击让popWin消失,同时popWin内也可以获取焦点
popWin.setFocusable(true);
popWin.setOutsideTouchable(true);
popWin.setBackgroundDrawable(new PaintDrawable());
//指定popWin显示和消失的动画
popWin.setAnimationStyle(R.style.PopWinAnimation);
}
//点击按钮显示PopupWindow
public void btnOnClick(View view){
//显示popWin,在按钮的正下方
popWin.showAtLocation(view, Gravity.CENTER, 0, 10);
}
}
在上面的代码中,onCreate方法里创建了PopupWindow,并指定了它的布局和大小,最后还为PopupWindow指定了显示和消失的动画,这里使用的是平移动画,要使用动画,我们先要在res/anim文件夹(没有的话新建一个文件夹)下创建动画的xml文件,下面是PopupWindow的动画文件:
这是pop_show.xml :
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="500"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="500"
/>
</set>
这个是pop_hide.xml :
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="500"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="500"
/>
</set>
定义好动画文件之后,我们还需要在res/values/styles.xml文件中添加一个style,代码如下:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="android:Theme.Light" />
<style name="PopWinAnimation">
<item name="android:windowEnterAnimation">@anim/pop_show</item>
<item name="android:windowExitAnimation">@anim/pop_hide</item>
</style>
</resources>
其中的PopWinAnimation就是我们指定的窗口进入和退出的动画,然后在Java代码中,为PopupWindow添加动画效果的代码就是:
popWin.setAnimationStyle(R.style.PopWinAnimation);
源码下载点击这里