Android笔记系列--PopupWindow
程序员文章站
2024-02-13 20:38:10
...
(1)构造函数:
1. 方法一:
public PopupWindow (Context context)
2. 方法二:
public PopupWindow(View contentView)
3. 方法三:
public PopupWindow(View contentView, int width, int height)
4. 方法四:
public PopupWindow(View contentView, int width, int height, boolean focusable)
contentView,width,height不可缺少
View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.popuplayout, null);
PopupWindwo popWnd = PopupWindow (context);
popWnd.setContentView(contentView);
popWnd.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
popWnd.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
(2)显示函数
1. 相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor):
2. 相对某个控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上;
showAsDropDown(View anchor, int xoff, int yoff):
3. 相对于父控件的位置(例如正*Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
showAtLocation(View parent, int gravity, int x, int y):
(3)其它函数
public void dismiss()
//另外几个函数,这里不讲其意义,下篇细讲
public void setFocusable(boolean focusable)
public void setTouchable(boolean touchable)
public void setOutsideTouchable(boolean touchable)
public void setBackgroundDrawable(Drawable background)
//设置动画所对应的style
mPopWindow.setAnimationStyle(R.style.contextMenuAnim);
<style name="contextMenuAnim" parent="@android:style/Animation.Activity">
<item name="android:windowEnterAnimation">@anim/context_menu_enter</item>
<item name="android:windowExitAnimation">@anim/context_menu_exit</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromXDelta="0"
android:fromYDelta="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toXDelta="0"
android:toYDelta="100%p" />
</set>
例子
private void showPopupWindow() {
//设置contentView
View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.popuplayout, null);
mPopWindow = new PopupWindow(contentView,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true);
//注意:必须要设置背景
mPopWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//显示PopupWindow
View rootview = LayoutInflater.from(MainActivity.this).inflate(R.layout.main, null);
//设置动画
mPopWindow.setAnimationStyle(R.style.contextMenuAnim);
mPopWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0);
}
点击空白消失需要设置两个函数:
1. setFocusable(true),或在构造函数的参数设置为true 等效
2. setBackgroundDrawable() ;必须设置背景
这两个函数要在showAtLocation()函数之前