1、如何实现:将一个EditText和ListView+PopupWindow 结合起来。自定义一个EditText,在自定义控件中用PopupWindow实现弹出ListView,已达到想要的效果。

2、需要的布局: 1、EditText+ImageButton 的布局 

2、ListView的布局  

3、代码

EditText+ImageButton 的布局:

ListView的布局 :

自定义控件java代码:

package com.wxcoming.wxcomingerp.custom.sptoedit;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.drawable.ColorDrawable;

import android.support.annotation.AttrRes;

import android.support.annotation.NonNull;

import android.support.annotation.Nullable;

import android.text.TextUtils;

import android.text.TextWatcher;

import android.util.AttributeSet;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.MotionEvent;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.EditText;

import android.widget.FrameLayout;

import android.widget.ImageButton;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.PopupWindow;

import com.wxcoming.wxcomingerp.R;

/**

* Created by adolph_jun on 2017/10/13.

*/

public class CDropEditText extends FrameLayout implements View.OnClickListener, AdapterView.OnItemClickListener {

private EditText mEt;

private ImageButton mIb;

private ListView mLv;

private Context context;

private PopupWindow popWindow;

public CDropEditText(Context context) {

super(context);

this.context = context;

}

public CDropEditText(Context context,AttributeSet attrs) {

super(context, attrs);

//放在三个属性的构造方法处会报错

LayoutInflater.from(context).inflate(R.layout.custome_dropedittext, this);

mEt = (EditText) findViewById(R.id.CD_Et_account);

mIb = (ImageButton) findViewById(R.id.CD_Iv_drop_image);

initPopWindow(mIb);

}

public CDropEditText( Context context, AttributeSet attrs,int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

super.onLayout(changed, left, top, right, bottom);

}

@Override

protected void onFinishInflate() {

super.onFinishInflate();

mIb.setOnClickListener(this);

mLv.setOnItemClickListener(this);

}

/**

* 编辑内容改变监听

* @param textWatcher

*/

public void setEditChange(TextWatcher textWatcher){

if(textWatcher!=null){

mEt.addTextChangedListener(textWatcher);

}

}

/**

* 给list添加数据

* @param adapter

*/

public void setAdapter(BaseAdapter adapter){

//popWindow.showAsDropDown(this, 0, 5);

mLv.setAdapter(adapter);

}

private void initPopWindow(View v) {

View view = LayoutInflater.from(getContext()).inflate(R.layout.pop_view, null, false);

mLv = (ListView) view.findViewById(R.id.CD_pop);

popWindow= new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);

popWindow.setTouchable(true);

popWindow.setTouchInterceptor(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

return false;

}

});

popWindow.setBackgroundDrawable(new ColorDrawable(0x00000000)); //要为popWindow设置一个背景才有效

}

public void showPop(){//弹出listview

popWindow.showAsDropDown(this, 0, 5);

}

@Override//下拉图标按钮监听

public void onClick(View v) {

if(v.getId() == R.id.CD_Iv_drop_image) {

if(popWindow.isShowing()) {

popWindow.dismiss();

return;

}

popWindow.showAsDropDown(this, 0, 5);

}

}

@Override//listview中item的点击事件监听

public void onItemClick(AdapterView> parent, View view, int position, long id) {

mEt.setText(mLv.getAdapter().getItem(position).toString());

popWindow.dismiss();

}

}

android editext下拉框,android实现下拉框和输入框结合相关推荐

  1. Android中自定义xml文件给Spinner下拉框赋值并获取下拉选中的值

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...

  2. 【Android】带可输入功能的下拉框EditSpinner,附带Filter功能

    功能实现,分为前期准备+使用. 1.前期准备 在model下建立一个spinner包文件夹,在这个文件夹中添加4个java文件: 1.BaseEditSpinnerAdapter.java impor ...

  3. Android实现仿QQ登录可编辑下拉菜单

    在Android里,直接提供的Spinner控件虽然可以实现下拉菜单的效果,但其效果并不理想,很多时候我们需要类似手机QQ那样既可以在文本框中直接输入编辑文字,可以在下拉菜单中选中或者删除菜单选项,并 ...

  4. ​Android实现仿QQ登录可编辑下拉菜单

    Android实现仿QQ登录可编辑下拉菜单 在Android里,直接提供的Spinner控件虽然可以实现下拉菜单的效果,但其效果并不理想,很多时候我们需要类似手机QQ那样既可以在文本框中直接输入编辑文 ...

  5. android 实现仿QQ登录可编辑下拉菜单

    今天,简单讲讲android里如何实现向QQ一样的登录后记住用户名的下拉框. 这个其实也很简单,网上搜索了一下,很多相关的资料,基本都是PopupWindow+ListView的方式,实现起来比较灵活 ...

  6. android studio 下拉菜单,怎么在android studio中使用Spinner实现一个下拉菜单

    怎么在android studio中使用Spinner实现一个下拉菜单 发布时间:2021-03-23 14:56:15 来源:亿速云 阅读:92 作者:Leah 这期内容当中小编将会给大家带来有关怎 ...

  7. Android自定义控制(五)仿新浪微博的下拉刷新

    网上有很多很有名的开源框架,这里就来拉拉PullToRefresh这个框架,也就是我们平时用的下拉刷新啦,当然你问我这个有什么用啊?别人已经写好了,这里主要是学习以及练习,练习的次数多了,一切就顺其自 ...

  8. Android新控件RecyclerView浅析及上拉和下拉刷新

    概述: RecyclerView是android-support-v7-21版本中新增的一个Widgets,RecyclerView是ListView的升级版本,更加先进和灵活.在以后的开发中我们就可 ...

  9. Android m 自定义下拉菜单,Android实现动画效果的自定义下拉菜单功能

    我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项.今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果. 要实现的 ...

最新文章

  1. [转]笑话: 耐力惊人的三只乌龟
  2. seaborn系列 (15) | 双变量关系图jointplot()
  3. opencv 最大内接矩形笔记
  4. Windows 7 部署 Android 开发环境傻瓜式教程(Eclipse+ADT)
  5. python编码转换语句_好程序员Python教程之字符串编码知识小结
  6. CASE_02 基于FPGA的数字钟万年历
  7. 【渝粤题库】国家开放大学2021春3894理工英语1题目
  8. Java中接口的多继承
  9. 免费SSL证书(支持1.0、1.1、1.2)
  10. java instant获取微秒转成日期格式_Java8新特性时间日期库DateTime API及示例
  11. springboot集成logback配置文件模板
  12. GlusterFS 部署和应用
  13. Third《高质量程序设计指南—C++/C语言》(第二版)
  14. 锐捷校园网使用python登录
  15. sja1000 CAN控制器波特率计算方法详解
  16. WinCC vbs脚本小结
  17. 诺诺开放平台(电子发票、智能编码、发票查验接口调用)
  18. 自走棋突然显示服务器无法定位,刀塔自走棋服务器无法定位游戏会话_刀塔自走棋服务器无法定位游戏会话怎么回事_玩游戏网...
  19. 【视频学习】宋维钢词霸天下38000词汇速记 万法归宗之英语语法速成全集
  20. [Poi 2012] bzoj2794 Cloakroom [dp]

热门文章

  1. CYGWIN 安装教程
  2. 【深度学习】使用深度学习检测混凝土结构中的表面裂缝
  3. 在 OneNote 2010中输入复杂的数学公式
  4. 零伽壹链改深度解析|区块链技术应用于电子发票管理
  5. E3-1231-V3 搭配华硕B85 -A R2.0 主板锁定全核心3.8GHZ以及M.2 NVME 固态硬盘作为系统盘bios
  6. 如何将多个excel表格合并成一个_如何将多个PDF的首页整合成一个单独的PDF
  7. matlab 生成mat文件
  8. Python基础入门知识
  9. CTFshow_web入门_信息收集(web1-20)
  10. 深入浅出最优化(2) 步长的计算方法