popwindow的封装
来源:互联网 发布:hp打印机驱动for mac 编辑:程序博客网 时间:2024/06/15 17:46
popwindow使用中还是遇到几个问题,记录一下
1、popwindow弹出位置,还未解决弹出在控件上方的办法(目前高度写死)
2、popwindow弹出时背景变灰(类似dialog的效果)
3、popwindow与Listview使用时,item宽度自适应解决。
4、简单的对popwindow进行封装,打造易用的popwindow。
1、PopList类
package com.example.pop;import android.app.Activity;import android.content.Context;import android.graphics.drawable.BitmapDrawable;import android.view.LayoutInflater;import android.view.View;import android.view.WindowManager;import android.widget.AdapterView;import android.widget.ListView;import android.widget.PopupWindow;import java.util.ArrayList;/** * Created by yuxiaogang on 2017/3/12. */public class PopList { private Context context; private PopupWindow popupWindow; private ListView listview; private PopAdapter popAdapter; private ArrayList list; private MyOnDismissListener listener; public void setItemClick(MyItemClick itemClick) { this.itemClick = itemClick; } private MyItemClick itemClick; //设置pop消失的监听事件; public void setListener(MyOnDismissListener listener) { this.listener = listener; } public interface MyOnDismissListener { void onClick(); } //设置item的点击事件 public interface MyItemClick{ void onItemClick(String str); } public PopList(Context context, ArrayList list) { this.context = context; this.list = list; } public void showPop(Activity activity, View v) { if (popupWindow != null) { popupWindow.dismiss(); } else { initPop(activity, v); } } public boolean disMissPop() { boolean isshowing = false; if (null != popupWindow) { isshowing = popupWindow.isShowing(); popupWindow.dismiss(); } return isshowing; } private void initPop(final Activity activity, View v) { View view = LayoutInflater.from(context).inflate( R.layout.pop, null); listview = (ListView) view.findViewById(R.id.listview); popAdapter = new PopAdapter(v.getContext(), list); listview.setAdapter(popAdapter); popupWindow = new PopupWindow(view, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT); listview.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); popupWindow.setFocusable(true); popupWindow.setOutsideTouchable(true); popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.showAsDropDown(v); ScreenUtils.darkenBackgroud(activity, 0.6f); popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { if (listener != null) { ScreenUtils.darkenBackgroud(activity, 1f); listener.onClick(); } } }); listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String str= (String) popAdapter.getItem(position); itemClick.onItemClick(str); } }); }}
2、在Activity中使用
package com.example.pop;import android.content.Context;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private TextView text_select; private Context context = MainActivity.this; private PopupWindow window; private ArrayList list; private ListView listview; private PopAdapter popAdapter; private LinearLayout ll_select; private ImageView iv_pull; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text_select = (TextView) findViewById(R.id.text_select); ll_select = (LinearLayout) findViewById(R.id.ll_select); iv_pull = (ImageView) findViewById(R.id.iv_pull); ll_select.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { iv_pull.setImageResource(R.mipmap.arrow_spinner_up); initDate(); final PopList popList = new PopList(context, list); popList.showPop(MainActivity.this, v); popList.setListener(new PopList.MyOnDismissListener() { @Override public void onClick() { Log.i("----", "dimiss"); iv_pull.setImageResource(R.mipmap.arrow_spinner_down); } }); popList.setItemClick(new PopList.MyItemClick() { @Override public void onItemClick(String str) { text_select.setText(str); popList.disMissPop(); } }); } }); } private void initDate() { list = new ArrayList(); list.add("111"); list.add("222"); list.add("3333333333333333"); list.add("444"); list.add("555"); list.add("555"); }}
代码下载地址
http://download.csdn.net/detail/androidxiaogang/9778734
1 0
- popwindow的封装
- Popwindow封装
- PopWindow封装
- 【Popwindow】自定义popwindow的底部间隙问题
- 封装popwindow类,实现所有activity共用
- 基类中的popwindow 再次封装
- 我喜欢的popwindow
- PopWindow的理解
- 仿微信的弹出popwindow
- popwindow的基本使用
- PopWindow的实现功能
- popwindow的大小
- android popwindow的使用
- PopWindow的使用方法之一
- android popwindow的使用
- popWindow的使用
- 类似popwindow的dialog
- popwindow的使用
- sort()函数,使用自己定的规则排序
- 实例介绍利用valgrind定位memcpy内存重叠问题------顺便再次说说memcpy和memmove的区别
- CentOS7 gnome图形界面下的终端快捷键是什么?
- 笔记
- 【来自简书】sublime3 build system
- popwindow的封装
- C++面试题(二)
- Servlet不同版本配置web.xml头信息
- 抽象工厂+反射+配置文件
- 项目架构开发:服务层
- bzoj 3611: [Heoi2014]大工程 (虚树+树形DP)
- LeetCode: Reverse Integer
- 【Java学习笔记】join()方法
- 紫书搜索 例题7-12 UVA