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;
public void setListener(MyOnDismissListener listener) {
this.listener = listener;
}
public interface MyOnDismissListener {
void onClick();
}
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