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() {@Overridepublic void onDismiss() {if (listener != null) {ScreenUtils.darkenBackgroud(activity, 1f);listener.onClick();}}});listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic 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;@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic void onClick() {Log.i("----", "dimiss");iv_pull.setImageResource(R.mipmap.arrow_spinner_down);}});popList.setItemClick(new PopList.MyItemClick() {@Overridepublic 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