自定义控件:使用PopupWindow实现下拉框效果
来源:互联网 发布:网络犯罪调查2分集剧情 编辑:程序博客网 时间:2024/06/07 05:39
PopupWindow可以创建类似对话框风格的窗口,使用PopupWindow创建对话框风格的窗口只要如下两步即可:
1.调用PopupWindow的构造器创建PopupWindow对象。
2.调用PopupWindow的showAsDropDown(View view)将PopupWindow作为view组件的下拉组件显示出来;或调用PopupWindow的
showAtLocation()方法将PopupWindow在指定位置显示出来。
下拉框效果:
在editText的右边放置一个小箭头的图片,点击图片,在editText的下方弹出一个popupWindow,并对popupWindow进行一些设置即得到想要的效果。
1.写布局文件activity_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"> <EditText android:id="@+id/et_input" android:paddingRight="40dp" android:layout_width="200dp" android:layout_height="wrap_content" android:text="@string/hello_world" android:layout_centerHorizontal="true" android:layout_marginTop="50dp" /><ImageView android:id="@+id/down_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/et_input" android:background="@drawable/down_arrow" android:layout_alignRight="@id/et_input" android:layout_marginTop="5dp" android:layout_marginRight="5dp"/></RelativeLayout>2.实例化控件并准备数据
public class MainActivity extends Activity {private EditText et_input;private ImageView downArrow;/** * 装数据的集合 */private ArrayList<String> msgList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_input = (EditText) findViewById(R.id.et_input);downArrow = (ImageView) findViewById(R.id.dowan_arrow);//准备数据msgList = new ArrayList<String>();for(int i=0;i<30;i++){msgList.add("aaaaaaaaaa"+i);}}}3.设置向下箭头的点击事件并实例化popupWindow&TODO介绍
downArrow.setOnClickListener(this);//浮悬的窗体private PopupWindow popupWindow;@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.dowan_arrow:if(popupWindow == null){popupWindow = new PopupWindow(this);//设置高和宽popupWindow.setWidth(et_input.getWidth());popupWindow.setHeight(200);//设置窗体的内容//TODO ListView 还没有初始化popupWindow.setContentView(listView);}popupWindow.showAsDropDown(et_input, 0, 0);break;}}
4.实例化ListView并设置适配器
在onCreate方法中实例化ListView
//实例化ListViewlistView = new ListView(this);listView.setAdapter(new MyAdapter());
自定义适配器:
class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {return msgList.size();}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {View view;ViewHolder holder;if(convertView != null){view = convertView;holder = (ViewHolder) view.getTag();}else{view = View.inflate(MainActivity.this, R.layout.list_popupwindow_item, null);holder = new ViewHolder();holder.iv_user = (ImageView) view.findViewById(R.id.iv_user);holder.tv_tilte = (TextView) view.findViewById(R.id.tv_tilte);holder.iv_delete = (ImageView) view.findViewById(R.id.iv_delete);view.setTag(holder);}holder.tv_tilte.setText(msgList.get(position));holder.iv_delete.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//1.把点击的条在列表中移除msgList.remove(position);//2.更新数据notifyDataSetChanged();}});return view;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}}class ViewHolder{ImageView iv_user;TextView tv_tilte;ImageView iv_delete;}每条布局文件代码:list_popupwindow_item.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="55dip" android:gravity="center_vertical" android:padding="15dip" > <ImageView android:id="@+id/iv_user" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/user" android:padding="5dp" /> <TextView android:id="@+id/tv_tilte" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="aaaaaaaaa1" /> <ImageView android:id="@+id/iv_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:background="@drawable/delete" android:padding="5dp" /></RelativeLayout>5.ListView在低版本2.3的适配并解决各个问题
设置输入框宽度为200dp
<EditText android:id="@+id/et_input" android:paddingRight="40dip" android:layout_marginTop="20dip" android:layout_centerHorizontal="true" android:layout_width="200dip" android:layout_height="wrap_content" android:text="@string/hello_world" />解决按下变白的问题:
listView = new ListView(this);listView.setBackgroundResource(R.drawable.listview_background);listView.setAdapter(new MyAdapter());解决点击popupwindow外部,无法消掉问题
popupWindow.setOutsideTouchable(true);设置选择某一条,并且显示在输入框中
listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {<span style="white-space:pre"></span>et_input.setText(msgList.get(position));}});
注意需要设置popupwindow的焦点才起作用
popupWindow.setFocusable(true);
在setOnItemClickListener方法中消掉对话框
popupWindow.dismiss();
整体代码:
package com.xbmu.popupwindow;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {private EditText et_input;private ImageView down_arrow;/** * 装数据的集合 */private List<String> mDatas;//悬浮的窗体private PopupWindow popupWindow;private ListView mListView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_input = (EditText) findViewById(R.id.et_input);down_arrow = (ImageView) findViewById(R.id.down_arrow);down_arrow.setOnClickListener(this);mDatas = new ArrayList<String>();//封装数据for (int i = 0; i < 50; i++) {mDatas.add("aaaaaaaaaaa"+i);}mListView = new ListView(this);mListView.setBackgroundResource(R.drawable.listview_background);mListView.setAdapter(new MyAdapter());mListView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {et_input.setText(mDatas.get(position));popupWindow.dismiss();}});}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.down_arrow:if(popupWindow == null){popupWindow = new PopupWindow(this);//设置宽和高popupWindow.setWidth(et_input.getWidth());popupWindow.setHeight(200);//设置窗体的内容popupWindow.setContentView(mListView);popupWindow.setOutsideTouchable(true);popupWindow.setFocusable(true);}popupWindow.showAsDropDown(et_input, 0, 0);break;}}private class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {return mDatas.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {View view;ViewHolder holder;if(convertView == null){view = View.inflate(MainActivity.this, R.layout.popupwindow_item, null);holder = new ViewHolder();holder.iv_user = (ImageView) view.findViewById(R.id.iv_user);holder.tv_msg = (TextView) view.findViewById(R.id.tv_msg);holder.iv_delete = (ImageView) view.findViewById(R.id.iv_delete);view.setTag(holder);}else{view = convertView;holder = (ViewHolder) view.getTag();}holder.tv_msg.setText(mDatas.get(position));holder.iv_delete.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//1.把点击的条在列表中移除mDatas.remove(position);//2.更新数据notifyDataSetChanged();}});return view;}}class ViewHolder{ImageView iv_user;TextView tv_msg;ImageView iv_delete;}}
全部代码下载地址:
http://download.csdn.net/detail/btt2013/9350371
0 0
- 自定义控件:使用PopupWindow实现下拉框效果
- 自定义PopupWindow实现下拉菜单选项效果
- 使用PopupWindow实现ActionBar下拉菜单效果
- 使用PopupWindow实现的自定义下拉列表
- Android 自定义PopupWindow 实现 ListView与PopupWindow结合下拉框
- 使用PopupWindow自定义的下拉框
- android 自定义菜单 使用PopupWindow实现菜单的各种效果
- RecyclerView+PopupWindow实现下拉列表选择效果
- Popupwindow实现自定义的下拉菜单
- 自定义View,实现PopupWindow下拉列表
- 下拉选择控件(PopupWindow)的使用
- Android自定义Button结合PopupWindow和ListView实现顺序显示下拉菜单控件
- Android学习(42) -- 自定义控件(6)下拉选择实现( 动态ListView + popupWindow)
- 使用TextView和PopupWindow实现下拉菜单效果,item等高
- 自定义dialog实现PopupWindow的效果
- Android 自定义PopupWindow实现悬浮窗效果
- Android 使用PopupWindow实现下拉列表
- 使用PopupWindow实现Spinner的下拉列表
- LeetCode Game of Life(位操作)
- Android仿微信界面--使用viewpager实现(慕课网笔记)
- OpenCV 5种图像滤波辨析:方框、均值、高斯、中值、双边
- 椭圆曲线
- 30个Oracle语句优化规则详解
- 自定义控件:使用PopupWindow实现下拉框效果
- HtmlHelper方法汇集
- leetcodeNim Game
- java中的static
- android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an appli
- 简单的在两个activity中传递数据
- P02 (*) 获取列表的倒数第二个元素
- ListView多布局加载
- JavaFX 内置的布局面板