popwindow的封装

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值