自定义下拉列表与PopupWindow的使用(弹出窗口)

自定义下拉列表之PopupWindow的使用(一个弹出窗口,可以用来显示任意视图。出现的弹出窗口是一个浮动容器的当前活动)

功能:在编辑框中的右边放入一个下拉的图片,点击的时候弹出一个popupWindow,里面显示ListView

Java代码:MainActivity.java

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
//自定义下拉列表之PopupWindow的使用(一个弹出窗口,可以用来显示任意视图。出现的弹出窗口是一个浮动容器的当前活动)
public class MainActivity extends Activity {

    private EditText edit;
    private ImageButton imgbtn;
    private ListView listView;
    private ArrayList<String> datas;
    private PopupWindow popup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        edit = (EditText) findViewById(R.id.editText);
        imgbtn = (ImageButton) findViewById(R.id.imagebut);
        imgbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("图片按钮");
                popupWindow();
            }
        });
        
        listView = new ListView(this);
        datas = new ArrayList<String>();
        for (int i = 0; i < 15; i++) {
            datas.add("100"+i);
        }
        listView.setDivider(null);//设置分割线
        listView.setVerticalScrollBarEnabled(false);//不显示滑动条
        listView.setAdapter(new MyAdapter());
    }
    /**
     * 显示窗口
     */
    private void popupWindow(){
        popup = new PopupWindow(this);
        popup.setWidth(edit.getWidth());
        popup.setHeight(200);
        popup.setContentView(listView);//设置显示内容
        popup.setOutsideTouchable(true);//点击PopupWindow以外的区域自动关闭该窗口
        popup.showAsDropDown(edit, 0, 0);//显示在edit控件的下面0,0代表偏移量
    }
    //适配器
    private class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return datas.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            HolderView holderView=null;
            if(convertView==null){
                convertView=View.inflate(getApplicationContext(), R.layout.list_item,null);
                holderView=new HolderView();
                holderView.text=(TextView) convertView.findViewById(R.id.textView);
                holderView.delete=(ImageButton) convertView.findViewById(R.id.delete);
                convertView.setTag(holderView);
            }else{
                holderView=(HolderView) convertView.getTag();
            }
            holderView.text.setText(datas.get(position));
            holderView.delete.setImageResource(android.R.drawable.ic_delete);
            //为listView的每一个子条目设置监听,以区分每个删除按钮
            holderView.delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    datas.remove(position);//删除listview的这行数据
                    MyAdapter.this.notifyDataSetChanged();//更新ListView的数据
                }
            });
            //listview的单击事件
            convertView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    System.out.println("单机了子条目");
                    //将单机的这项的文本显示在EditText中,并关闭窗口
                    edit.setText(datas.get(position));
                    popup.dismiss();//关闭窗口
                }
            });
            return convertView;
        }
        class HolderView{//由于这里用户都是同一个人,就省略用户图像的刷新
            private TextView text;
            private ImageButton delete;
        }
    }
}

布局文件: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"
    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:layout_width="200dp"
        android:id="@+id/editText"
        android:layout_height="50dp"
           android:hint="自定义下拉列表" />

    <ImageButton 
        android:layout_width="30dp"
        android:layout_height="40dp"
        android:id="@+id/imagebut"
        android:layout_margin="5dp"
        android:layout_alignRight="@id/editText"
        android:src="@drawable/a"/>
</RelativeLayout>

ListView的子布局:list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:orientation="horizontal" >
    <!-- 用户图像 -->
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
    <!-- 内容 -->
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textSize="20sp"
        android:layout_weight="1"
        android:text="TextView" />
    <!-- 删除按钮 -->
    <ImageButton
        android:id="@+id/delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_delete" />
</LinearLayout>

效果图:

posted @ 2016-07-28 09:41  ts-android  阅读(1569)  评论(0编辑  收藏  举报