本文要讲述的知识点:
- android 中PopupWindow的使用
基本使用
// 用于PopupWindow的View
View contentView=LayoutInflater.from(context).inflate(layoutRes, null, false);
// 创建PopupWindow对象,其中:
// 第一个参数是用于PopupWindow中的View,第二个参数是PopupWindow的宽度,
// 第三个参数是PopupWindow的高度,第四个参数指定PopupWindow能否获得焦点
PopupWindow window=new PopupWindow(contentView, 100, 100, true);
// 设置PopupWindow的背景
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// 设置PopupWindow是否能响应外部点击事件
window.setOutsideTouchable(true);
// 设置PopupWindow是否能响应点击事件
window.setTouchable(true);
// 显示PopupWindow,其中:
// 第一个参数是PopupWindow的锚点,第二和第三个参数分别是PopupWindow相对锚点的x、y偏移
window.showAsDropDown(anchor, xoff, yoff);
// 或者也可以调用此方法显示PopupWindow,其中:
// 第一个参数是PopupWindow的父View,第二个参数是PopupWindow相对父View的位置,
// 第三和第四个参数分别是PopupWindow相对父View的x、y偏移
// window.showAtLocation(parent, gravity, x, y);
这段代码是从Android PopupWindow使用方法小结文章中拷贝过来的,其实我就是懒的去写。正好看见这篇文章写的还是不错的就拷贝过来了!
这里和大家分享一个我遇到的问题:
1.设置尺寸的时候我使用的是ViewGroup.LayoutParams.WRAP_CONTENT,但是展示出来的布局过大的问题,一般这个问题应该是你在布局中使用了match_parent造成的,
常见的一些修改:
1.设置popupWindow显示的背景问题(背景设置成半透明):
我在网上找了一种最简单的方法,但是基本上能满足上述要求(就是设置Activirty的透明度)
步骤1:当popupWindow调用show方法后,设置activity的alpha值
//显示背景
WindowManager.LayoutParams lp = getActivity().getWindow().getAttributes();
lp.alpha = 0.8f;
getActivity().getWindow().setAttributes(lp);
步骤2:监听popupWindow的setOnDismissListener(关闭的监听,这里主要是为了设置相应的Activyt的alpha值)
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
//在dismiss中恢复透明度
public void onDismiss() {
WindowManager.LayoutParams lp = getActivity().getWindow().getAttributes();
lp.alpha = 1f;
getActivity().getWindow().setAttributes(lp);
}
});
以上两个步骤就可以实现popupWindow背景的半透明效果(这里的透明度可以自己进行相应的设置)。
2.设置popupWindow的动画效果
说明一下popupWindow只有设置animationStyle的方法,没有设置相应一个动画的方法,所以这里为了实现效果是要写一个相应的AnimationStyle的
步骤1:编辑动画的一些内容
<!-- 进入动画 -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromYDelta="100%p"
android:toYDelta="0" />
<alpha
android:duration="200"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
<!-- 退出动画 -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromYDelta="0"
android:toYDelta="50%p" />
<alpha
android:duration="200"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
<!-- 动画的style注意这个是写在values中的 -->
<style name="photo_anim" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/enter_animation</item>
<item name="android:windowExitAnimation">@anim/exit_animation</item>
</style>
步骤2:添加相应的style
//设置动画
mPopupWindow.setAnimationStyle(R.style.take_photo_anim);
注意这个应该设置在相应的show方法之前!!!切记。。。
网友评论