自定义popwindow
2017-04-28 13:39
141 查看
自定义popwindow
前言:很普通的popwindow,温故下。1. PopupWindow是一个以弹窗方式呈现的控件,可以用来显示任意视图(View),而且会浮动在当前活动(activity)的顶部。
2. 基本属性:
设置宽的值,可以是WRAP_CONTENT、MATCH_PARENT、也可以是具体数值
popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
设置高的值,可以是WRAP_CONTENT、MATCH_PARENT、也可以是具体数值
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
设置popwindow的布局
popupWindow.setContentView(view);
上面三个属性是必要属性,必须设置,否则不会加重view.
setBackgroundDrawable(new ColorDrawable(0x00000000));
设置popwindow的背景,这个属性目前也是必须的(目前版本)可能会导致返回键不起作用,先看源码
在不设置背景为null的情况下,会直接返回contentView。不为null情况下,会根据mContentView和
mBackground生成新的mBackgroundView。在往下看发现PopupBackgroundView是一个内部私有类继承至FrameLayout,且该类完成了对onKey和onTouch事件的分发处理。如下:
contentView我们并没有进行onKey和onTouch事件的分发处理,所以在backgroundDrawable!=null的情况下,即使PopupWindow获得屏幕焦点,PopupWindow也不能处理物理按键的点击事件.
3. 设置位置属性:
让其显示在目标View的正左下方
showAsDropDown(View target):
相对目标控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上(正左下方为基准)
showAsDropDown(View anchor, int xoff, int yoff):
相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
showAtLocation(View parent, int gravity, int x, int y):
4. 其他属性
setFocusable(true);//获取焦点
需要注意的是,如果为设置false,点击系统返回键(如果没对返回键处理)则会退出activity。
setOutsideTouchable则表示PopupWindow内容区域外的区域是否响应点击事件,表示点击内容区域外的区域是否关闭窗口,那么设置为true应该就是表示关闭,设置为false就是表示不关闭.
private OnDismissListener dismissListener = new OnDismissListener() {
@Override
public void onDismiss() {
//处理popwindow消失后的事件
}
};
popwindow消失的监听
5. popwindow的动画:
setAnimationStyle(R.style.pop_add_ainm);设置popwindow出现和现实的动画,在styles中设置以下:
<style name="pop_add_ainm" parent="android:Animation"> <item name="android:windowEnterAnimation">@anim/push_bottom_in</item> <item name="android:windowExitAnimation">@anim/push_bottom_out</item> </style>
至于动画效果可自己设置。
demo:
public class SpinerPopWindow<T> extends PopupWindow { private LayoutInflater inflater; private ListView mListView; private List<T> list; private MyAdapter mAdapter; public SpinerPopWindow(Context context, List<T> list, OnItemClickListener clickListener) { super(context); inflater = LayoutInflater.from(context); this.list = list; init(clickListener); } private void init(OnItemClickListener clickListener) { View view = inflater.inflate(R.layout.spiner_window_layout, null); setContentView(view); setWidth(LayoutParams.WRAP_CONTENT); setHeight(LayoutParams.WRAP_CONTENT); setFocusable(true); ColorDrawable dw = new ColorDrawable(0x00); setBackgroundDrawable(dw); mListView = (ListView) view.findViewById(R.id.listview); mListView.setAdapter(mAdapter = new MyAdapter()); mListView.setOnItemClickListener(clickListener); } private class MyAdapter extends BaseAdapter { @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.spiner_item_layout, null); holder.tvName = (TextView) convertView.findViewById(R.id.tv_name); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tvName.setText(getItem(position).toString()); return convertView; } } private class ViewHolder { private TextView tvName; } 在外部调用:
//构造方法(带list的popwindow,传入了一个list集合,和监听)
mSpinerPopWindow = new SpinerPopWindow(getActivity(), stringList, itemClickListener);
//设置消失监听处理
mSpinerPopWindow.setOnDismissListener(dismissListener);
//显示在目标位置下方
mSpinerPopWindow.showAsDropDown(targetview);
/** * popupwindow显示的ListView的item点击事件 */ private AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mSpinerPopWindow.dismiss(); tvSpinner.setText(stringList.get(position)); } };
最总效果:
“`
相关文章推荐
- 【Popwindow】自定义popwindow的底部间隙问题
- Android自定义PopWindow实现QQ、微信弹出菜单效果
- 自定义PopWindow,内部布局自定义
- 自定义PopWindow模仿微信拍照上传头像
- android自定义PopWindow底部显示
- 自定义PupopWindow(带动画效果)
- PopWindow实现自定义Menu
- 自定义popWindow
- 简单明了方便使用的自定义popWindow
- 自定义popWindow布局
- 自定义 Popwindow
- android自定义popwindow,并且有从底部弹出的动画
- 自定义 仿QQ底部菜单popWindow
- 自定义popWindow(高仿qq加号弹出框)
- Android 自定义PopWindow的简单使用
- android自定义PopWindow底部显示
- PopWindow:基本使用与自定义PopWindow
- 自定义漂亮的seekBar,内带popwindow及指示器
- Android popwindow 实现自定义数字键盘
- android popwindow使用(实现自定义下拉菜单)