您的位置:首页 > 运维架构

PopupWindow 下拉选择

2016-04-13 15:10 274 查看
第一:xml文件

<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp">
<!-- 如果editText中文字过长会被下拉的倒三角覆盖
解决方案:
在EditText设置属性
android:singleLine="true"
android:paddingRight="30dp"
-->
<EditText
android:id="@+id/editText"
android:layout_width="150dp"
android:layout_height="40dp"
android:singleLine="true"
android:paddingRight="30dp"/>
<ImageView
android:id="@+id/iv_select"
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_alignRight="@id/editText"
android:layout_centerVertical="true"
android:background="@mipmap/ic_launcher"
/>
</RelativeLayout>

</RelativeLayout>


listview Item布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"

>
<ImageView
android:id="@+id/user"
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@mipmap/ic_launcher" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/user"
android:layout_marginLeft="10dp"
android:text="90000"
/>

<ImageView
android:id="@+id/del"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentRight="true"
android:background="@mipmap/ic_launcher" />
</RelativeLayout>


第二:mainActivity

package heimadownselect.ncs.yeyy.downselect;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends Activity implements View.OnClickListener {

private EditText et;
private ImageView ivSelect;
private ArrayList<String> list = new ArrayList<String>();
private MyAdapter adapter;
private ListView listView;
private int pwh = 300;
private PopupWindow popupWindow;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
initData();

}

private void initData() {
for (int i = 0; i < 15; i++) {
list.add(900000 + i + "");
}
initListView();
}

private void showNumberList() {
if (popupWindow == null) {
popupWindow = new PopupWindow(listView, et.getWidth(), pwh);
}
//        要让其中的view获取焦点,必须设置为true,以下三个属性必须同时设置
popupWindow.setFocusable(true);
//        还必须设置一个背景图片,可以为空
popupWindow.setBackgroundDrawable(new BitmapDrawable());
//        设置点击外部消失
popupWindow.setOutsideTouchable(true);
popupWindow.showAsDropDown(et, 0, 0);
}

private void initListView() {
listView = new ListView(MainActivity.this);
//        1.设置背景图片,图片来源于drawable;
//        flightInfoPanel.setBackgroundDrawable(getResources().getDrawable(R.drawable.search_label_click));
//        2.转换字符串为int(颜色);
//        listItemView.deleteFilghtBg.setBackgroundColor(Color.parseColor("#F5F5DC"));
listView.setBackgroundResource(R.mipmap.ic_launcher);
//        listView.setBackgroundColor(0xFFFF0000);
listView.setBackgroundColor(Color.parseColor("#ffffff"));
//        隐藏listview的滚动条
listView.setVerticalScrollBarEnabled(false);
adapter = new MyAdapter();
listView.setAdapter(adapter);

/**
* 假如listView的item中有Button,ImageButton,checkBox等会强制获取焦点的view,此时listview的item无法获取焦点,从而无法被点击
*
* 解决方法:
* 在item根布局中,增加以下属性:
* android:descendantFocusability="blocksDescendants"
* 设置后Button自己可以获取到焦点,item中其他空间也可以获取焦点
*/
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
et.setText(list.get(position));
popupWindow.dismiss();
}
});

}

private void initListener() {
ivSelect.setOnClickListener(this);

}

private void initView() {
et = (EditText) findViewById(R.id.editText);
ivSelect = (ImageView) findViewById(R.id.iv_select);

}

@Override
public void onClick(View v) {

switch (v.getId()) {
case R.id.iv_select:
Log.e("123", "123");
showNumberList();
break;
default:
break;
}
}

class MyAdapter extends BaseAdapter {

//系统调用。用来获知集合中多少个元素
@Override
public int getCount() {
return list.size();
}

//获取列表中的单个对象
@Override
public Object getItem(int position) {
return null;
}

//获取列表对象的Id
@Override
public long getItemId(int position) {
return 0;
}

//        由系统调用,获取一个view 对象,作为listview的条目
//        listview的每个条目都是一个view对象
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final View view = View.inflate(MainActivity.this, R.layout.item_listview, null);
TextView tv = (TextView) view.findViewById(R.id.tv);
ImageView del = (ImageView) view.findViewById(R.id.del);
tv.setText(list.get(position));
del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Log.e("1111", "position" + position);
list.remove(position);
notifyDataSetChanged();
int listViewHeight = view.getHeight()*list.size();
popupWindow.update(et.getWidth(),listViewHeight>pwh?pwh:listViewHeight);
//                    如果没有数据了,popupWindow就消失
if (list.size() == 0) {
popupWindow.dismiss();
ivSelect.setVisibility(View.GONE);
}
}
});
return view;
}
}
}


注意:

如果你的listview的Item中有Button,ImageButton,checkBox 等会强制获取焦点的view,此时,listview的Item无法获取焦点,从而无法点击

解决方案:

在item的根布局下增加以下属性:

android:descendantFocusability="blocksDescendants"

设置后,button自己可以获取焦点,item中其他控件也可以获取焦点



源码地址:http://download.csdn.net/detail/csdnyuandaimaxuexi/9489896
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: