您的位置:首页 > 移动开发 > Android开发

Android 之PopupWindow弹出下拉列表

2016-01-29 14:47 489 查看
1. 首先看看main.xml布局:

<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:background="#22000000"
>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_centerHorizontal="true"
>
<EditText
android:id="@+id/et_text"
android:layout_width="150dp"
android:layout_height="40dp"
android:singleLine="true"
android:paddingRight="30dp"

/>
<ImageView
android:id="@+id/iv_select"
android:layout_alignRight="@+id/et_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/select"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:layout_marginTop="35dp"
/>
</RelativeLayout>
</RelativeLayout>


看看Activity怎么实现的吧:

public class MainActivity extends Activity implements OnClickListener{

private IFLYFullScreenAd ad;

private EditText et_text;
private ImageView iv_select;
private TextView tv_number;
private ImageView iv_delete;
private MyAdapter adapter;

private List<String> list=new ArrayList<String>();
private android.widget.ListView listView;
//默认为像素值px
private int pwHeight=300;
private PopupWindow window;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
et_text = (EditText) findViewById(R.id.et_text);
iv_select = (ImageView) findViewById(R.id.iv_select);
initListener();
initData();

}
/**
* 初始化数据
*/
private void initData() {
for (int i = 0; i <15; i++) {
list.add(90000+i+"");
}
ListView();
}
//创建ListView
private void ListView(){
listView = new android.widget.ListView(this);

//隐藏滚动条
listView.setVerticalScrollBarEnabled(false);
adapter=new MyAdapter();
listView.setAdapter(adapter);
//设置listview的点击事件
listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
et_text.setText(list.get(position));
window.dismiss();
}
});
}

class MyAdapter extends BaseAdapter{
@Override
public int getCount() {

return list.size();
}

@Override
public Object getItem(int position) {

return list.get(position);
}

@Override
public long getItemId(int position) {

return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final View view=View.inflate(MainActivity.this,R.layout.adapter,null);
tv_number = (TextView) view.findViewById(R.id.tv_number);
iv_delete = (ImageView) view.findViewById(R.id.iv_delete);

tv_number.setText(list.get(position));
iv_delete.setOnClickListener(new OnClickListener() {
//删除事件
@Override
public void onClick(View v) {
list.remove(position);
//更新adapter
notifyDataSetChanged();
int height=view.getHeight()*list.size();
if(height>pwHeight){
height=pwHeight;
}else{
height=view.getHeight()*list.size();
}
window.update(et_text.getWidth(), height);
if(list.size()==0){
window.dismiss();
}
}
});
return view;
}

}
/**
* 初始化事件
*/
private void initListener() {

iv_select.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_select:
showNumList();
break;

default:
break;
}

}
/**
* 将ListView的数据显示到列表中
* 第一个参数:是listView
* 第二个参数:PopupWindow的宽度,和EditText的宽度一致
* 第三个参数:设置固定的高度
*/
private void showNumList() {
if(window==null){
//创建PopupWindow
window = new PopupWindow(listView,et_text.getWidth(), pwHeight);
}

window.setFocusable(true);
//设置背景图片
window.setBackgroundDrawable(new BitmapDrawable());
//设置外部点击消失
window.setOutsideTouchable(true);
window.showAsDropDown(et_text);

}


}

看看效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: