popwindow的封装

    xiaoxiao2021-03-25  75

    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

    转载请注明原文地址: https://ju.6miu.com/read-35529.html

    最新回复(0)