1.activity
public class MainActivity extends Activity implements OnClickListener,OnItemClickListener{
private EditText mNumber;
private ImageView mArrow;
private ListView listview;
private PopupWindow popupWindow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
/**
* 初始化控件
* 2016-8-12 下午4:47:32
*/
private void initView() {
mNumber = (EditText) findViewById(R.id.number);
mArrow = (ImageView) findViewById(R.id.arrow);
//设置箭头的点击事件
mArrow.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.arrow:
//显示气泡
showPopupwindow();
break;
}
}
/**
* 显示气泡
* 2016-8-12 下午4:49:39
*/
private void showPopupwindow() {
View contentView = createView();
//contentView : 显示的界面
//width,height:宽高
//focusable : popuwindow是否可以获取焦点
popupWindow = new PopupWindow(contentView, mNumber.getWidth()-4, 300, true);
//设置popuwindow点击空白出消失
popupWindow.setOutsideTouchable(true);//是否可以点击空白处消失
//如果popupwindow要想实现动画,点击空白处消息等效果,必须给popuwindow设置背景
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//显示popupwindow
//popupWindow.showAsDropDown(mNumber);//显示在哪个控件的下方
popupWindow.showAsDropDown(mNumber, 2, -5);
}
/**
* 加载气泡所需的界面
* 2016-8-12 下午4:51:45
*/
private View createView() {
listview = (ListView) View.inflate(getApplicationContext(), R.layout.popuwindow_item, null);
//设置listview的显示数据
listview.setAdapter(new Myadapter(this));
//设置listview的条目点击事件
listview.setOnItemClickListener(this);
return listview;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//获取条目数据,设置给输入框显示,隐藏气泡
String msg = (String) listview.getItemAtPosition(position);//根据条目的位置,获取条目对应的数据
mNumber.setText(msg);
popupWindow.dismiss();
}
2.适配器
public class Myadapter extends BaseAdapter {
private Context mContext;
private List<String> list = new ArrayList<String>();
public Myadapter(Context context){
this.mContext = context;
for (int i = 0; i < 30; i++) {
list.add("1000"+i);
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = View.inflate(mContext, R.layout.listview_item, null);
viewHolder = new ViewHolder();
viewHolder.icon = (ImageView) convertView.findViewById(R.id.icon);
viewHolder.text = (TextView) convertView.findViewById(R.id.text);
viewHolder.delete = (ImageView) convertView.findViewById(R.id.delete);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
//显示数据
viewHolder.text.setText(list.get(position));
//点击删除按钮,删除条目
viewHolder.delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
list.remove(position);
//更新界面
notifyDataSetChanged();
}
});
return convertView;
}
static class ViewHolder{
ImageView icon,delete;
TextView text;
}
3.布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<EditText
android:id="@+id/number"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:hint="请输入QQ号码" />
<ImageView
android:id="@+id/arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/number"
android:layout_alignRight="@+id/number"
android:layout_alignTop="@+id/number"
android:src="@drawable/down_arrow" />
</RelativeLayout>