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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章