package com.dlts.myapplication;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle;
import android.text.BoringLayout;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.PopupWindow;
public class MainActivity extends Activity {
private PopupWindow mPopupWindow;
private Button mButton;
//用于显示位置的判断
private static final int POSITION_TOP = 0;
private static final int POSITION_RIGHT = 1;
private static final int POSITION_BOTTOM = 2;
private static final int POSITION_LEFT = 3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button)findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createPopupWindow(POSITION_TOP);
}
});
}
private void createPopupWindow(int position){
if(mPopupWindow==null){
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.popupwindow,null);
mPopupWindow = new PopupWindow(view, mButton.getWidth(),300);
mPopupWindow.setFocusable(true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setTouchable(true);
mPopupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
mPopupWindow.setAnimationStyle(R.style.PopupWindowAnim);
}
int location[] = new int[2];
mButton.getLocationOnScreen(location);;
switch (position){
case POSITION_TOP:
mPopupWindow.showAtLocation(mButton, Gravity.TOP|Gravity.LEFT, location[0], location[1]-mPopupWindow.getHeight());
break;
case POSITION_RIGHT:
mPopupWindow.showAtLocation(mButton,Gravity.NO_GRAVITY,location[0]+mButton.getWidth(),location[1]);
break;
case POSITION_BOTTOM:
mPopupWindow.showAtLocation(mButton,Gravity.NO_GRAVITY,location[0],location[1]+mButton.getHeight());
break;
case POSITION_LEFT:
mPopupWindow.showAtLocation(mButton,Gravity.NO_GRAVITY,location[0]-mPopupWindow.getWidth(),location[1]);
break;
}
}
}
设置点击popupwindow的外部消失
显示在指定view的某个方向mPopupWindow.setFocusable(true); mPopupWindow.setOutsideTouchable(true); mPopupWindow.setTouchable(true); mPopupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
case POSITION_TOP: mPopupWindow.showAtLocation(mButton, Gravity.TOP|Gravity.LEFT, location[0], location[1]-mPopupWindow.getHeight()); break; case POSITION_RIGHT: mPopupWindow.showAtLocation(mButton,Gravity.NO_GRAVITY,location[0]+mButton.getWidth(),location[1]); break; case POSITION_BOTTOM: mPopupWindow.showAtLocation(mButton,Gravity.NO_GRAVITY,location[0],location[1]+mButton.getHeight()); break; case POSITION_LEFT: mPopupWindow.showAtLocation(mButton,Gravity.NO_GRAVITY,location[0]-mPopupWindow.getWidth(),location[1]); break;
mPopupWindow.setAnimationStyle(R.style.PopupWindowAnim); 设置PopupWindow的动画
首先在anim文件夹下定义enter和exit的两个动画
popup_enter_anim.xml 动画如下
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:duration="1000" android:fromAlpha="0.1" android:toAlpha="1" /> </set>
popup_exit_anim.xml 动画如下
再在style.xml中定义style<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:duration="1000" android:fromAlpha="1" android:toAlpha="0.1" /> </set>
<style name="PopupWindowAnim"> <item name="android:windowEnterAnimation">@anim/popup_enter_anim</item> <item name="android:windowExitAnimation">@anim/popup_exit_anim</item> </style>
demo下载地址为http://download.csdn.net/detail/u010775312/9032583