PopupWindow 下拉选择
2016-04-13 15:10
274 查看
第一:xml文件
listview Item布局
第二:mainActivity
注意:
如果你的listview的Item中有Button,ImageButton,checkBox 等会强制获取焦点的view,此时,listview的Item无法获取焦点,从而无法点击
解决方案:
在item的根布局下增加以下属性:
android:descendantFocusability="blocksDescendants"
设置后,button自己可以获取焦点,item中其他控件也可以获取焦点
源码地址:http://download.csdn.net/detail/csdnyuandaimaxuexi/9489896
<?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
相关文章推荐
- STORM配置TOPOLOGY问题
- linux下无法删除文件
- nginx linux环境下的安装
- Spring错误:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.Bi
- 企业内部在centos7.2系统中必杀技NTP时间服务器及内网服务器时间同步(windows和linux客户端同步)
- 企业内部在centos7.2系统中必杀技NTP时间服务器及内网服务器时间同步(windows和linux客户端同步)
- linux制作可启动iso
- openwrt 更改 debug 等级(hostapd)
- 启动Tomcat出现Using CATALINA_BASE
- Centos6.5使用mdadm安装软RAID
- Spark学习之Hadoop安装与测试
- Android 从内核源码关掉Android SELinux
- 使用nginx后如何在web应用中获取用户ip及原理解释GOOD
- 常见几个linux基本语法命令
- thinkcmf在apache中无法启用rewrite的修改办法
- Hadoop常见端口
- configure: error: Apache version incompatible with APR version
- Linux进程间通信:管道
- OpenCV的TermCriteria模板类介绍
- Docker 制作Apache+PHP+GD+MongoDB+Redis镜像