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