下拉选择框

思路:
点击下拉,显示指定位置的popupwindow,点击文本,回显到editView上。具体细节,参阅代码
优化:

Button或ImageButton等自带按钮功能的控件会抢夺所在Layout的焦点.导致其他区域点击不生效.在所在layout声明一个属性

        android:descendantFocusability="blocksDescendants"

* popupwindow获取焦点, 外部可点击

            // 设置点击外部区域, 自动隐藏
        popupWindow.setOutsideTouchable(true); // 外部可触摸
        popupWindow.setBackgroundDrawable(new BitmapDrawable()); // 设置空的背景, 响应点击事件

        popupWindow.setFocusable(true); //设置可获取焦点

Activity

package com.maker_huige.textapplication;

import android.database.DataSetObserver;
import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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.ListAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{
    ListView listView;
    EditText et_text;
    PopupWindow popupWindow;
    ArrayList<String> items;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initUi();
    }

    private void showPopupWindow() {
        initView();
        //创建popupWindow,并指定宽高
        popupWindow = new PopupWindow(listView, et_text.getWidth(), 300);
        // 设置点击外部区域, 自动隐藏
        popupWindow.setOutsideTouchable(true); // 外部可触摸
        popupWindow.setBackgroundDrawable(new BitmapDrawable()); // 设置空的背景, 响应点击事件
        popupWindow.setFocusable(true); //设置可获取焦点
        //显示在指定空间下
        popupWindow.showAsDropDown(et_text,0,0);
    }

    private void initView() {
        items = new ArrayList<>();
        for (int i =0;i<30;i++){
            items.add(12301+ i +"");
        }
        listView = new ListView(this);
        //不要分割线
        listView.setDividerHeight(0);
        //设置背景图片
        listView.setBackgroundResource(R.mipmap.listview_background);
        listView.setAdapter(new MyAdapter());
        listView.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        et_text.setText(items.get(i));
        popupWindow.dismiss();
    }

    private void initUi() {
        et_text = (EditText) findViewById(R.id.et_text);
        findViewById(R.id.ib_bt).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showPopupWindow();
            }
        });
    }
    public class MyAdapter extends BaseAdapter {

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

        @Override
        public String getItem(int i) {
            return items.get(i);
        }

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

        @Override
        public View getView(final int i, View view, ViewGroup viewGroup) {
            View views;
            if(view != null){
                views = view;
            }else {
                views = View.inflate(viewGroup.getContext(),R.layout.item_popupwindow,null);
            }
            TextView tv_input = (TextView) views.findViewById(R.id.tv_input);
            tv_input.setText(getItem(i));
            views.findViewById(R.id.it_delete).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //删除并更新数据
                    items.remove(i);
                    notifyDataSetChanged();
                    if(items.size()==0){
                        popupWindow.dismiss();
                    }
                }
            });
            return views;
        }
    }
}

Activity_main.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:id="@+id/activity_main"
    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="com.maker_huige.textapplication.MainActivity">
    <RelativeLayout
        android:layout_width="300dp"
        android:layout_height="wrap_content">
        <EditText
       android:id="@+id/et_text"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"

       />
        <ImageButton
        android:id="@+id/ib_bt"
        android:padding="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/down_arrow"
            android:background="@null"
        android:layout_alignRight="@id/et_text"
        android:layout_alignTop="@id/et_text"
        android:layout_alignBottom="@id/et_text"
        />

    </RelativeLayout>
</RelativeLayout>

layout/item_popupwindow.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:gravity="center_vertical"
    android:descendantFocusability="blocksDescendants"
    android:layout_height="match_parent">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/user"
        />
    <TextView
        android:id="@+id/tv_input"
        android:paddingLeft="10dp"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="12306"
        />
    <ImageButton
        android:id="@+id/it_delete"
        android:padding="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/delete"
        />
</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值