Android仿泡泡窗实现下拉菜单条实例代码

功能描述:点击下拉按钮,显示出所有的条目,有删除和点击功能,点击后将条目显示。

注意:泡泡窗默认是没有焦点的。要让泡泡窗获取到焦点。假如listview的item中有Button,ImageButton,CheckBox等会强制获取焦点的view 此时,listview的item无法获取焦点,从而无法被点击 解决方法:给item的根布局增加以下属性 Android:descendantFocusability="blocksDescendants"设置之后,Button获取焦点,item中其他控件也可以获取焦点,如果文本的文字过多,会被后面的图标盖住,首先设置单行android:singleLine="true"再设置右边距就盖不住android:padding="40dp"

需要添加下面三项

//让泡泡窗额度条目获取到焦点
    popupWindow.setFocusable(true);
    //设置背景图
    popupWindow.setBackgroundDrawable(new BitmapDrawable());
    popupWindow.setOutsideTouchable(true); 

主布局文件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:background="#22000000"
  tools:context=".MainActivity" >
  <RelativeLayout
    android:layout_marginTop="40dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    >
  <EditText
    android:id="@+id/et"
    android:singleLine="true"
    android:padding="40dp"
    android:layout_width="300dp"
    android:layout_height="40dp"
    />
  <ImageView
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:id="@+id/iv_select"
    android:layout_centerVertical="true"
    android:background="@drawable/ic_launcher"
    android:layout_alignRight="@id/et"
    />
  </RelativeLayout>
</RelativeLayout> 

每一个条目的布局文件item_list.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:padding="5dp"
  android:orientation="horizontal" >
  <TextView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/ic_launcher"
    android:gravity="center_vertical"
    android:drawablePadding="3dp"
    android:text="123"
    android:id="@+id/tv_number"
    android:layout_weight="1"
    />
  <ImageView
    android:id="@+id/iv_delete"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/ic_launcher"
    />
</LinearLayout> 

逻辑代码MainActivity.java

package com.ldw.select;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
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 ImageView iv_select;
  private EditText et;
  private ArrayList<String> list = new ArrayList<String>();
  private TextView tv_number;
  private ImageView iv_delete;
  private ListView listView;
  private PopupWindow popupWindow;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    initView();
    initListener();
    initData();
  }
  private void initView() {
    setContentView(R.layout.activity_main);
    iv_select = (ImageView) findViewById(R.id.iv_select);
    et = (EditText) findViewById(R.id.et);
  }
  private void initListener() {
    iv_select.setOnClickListener(this);
  }
  //集合中添加数据
  private void initData() {
    for(int i = 0; i< 20; i++){
      list.add(1340000000 + i + "");
    }
    initListView();
  }
  //初始化列表
  private void initListView(){
    listView = new ListView(this);
    //设置listView的背景图
    listView.setBackgroundResource(R.drawable.ic_launcher);
    //让listView的滚动条不可见
    listView.setVerticalScrollBarEnabled(false);
    MyAdapter adapter = new MyAdapter();
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new OnItemClickListener(){
      @Override
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        et.setText(list.get(position));
        //关闭泡泡窗
        popupWindow.dismiss();
      }
    });
  }
  //泡泡窗实现点击显示列表,泡泡窗默认是不获取焦点的
  private void showNumberList(){
    if(popupWindow == null){
    //泡泡窗的填充,设置宽高
    popupWindow = new PopupWindow(listView, et.getWidth(), 300);
    }
    //让泡泡窗额度条目获取到焦点
    popupWindow.setFocusable(true);
    //设置背景图
    popupWindow.setBackgroundDrawable(new BitmapDrawable());
    popupWindow.setOutsideTouchable(true);
    //第一个参数是依附哪一个参数下,x轴,y轴的偏移量,相对于第一个参数的左下角的位置
    popupWindow.showAsDropDown(et, 0, 0);
  }
  @Override
  public void onClick(View v){
    switch (v.getId()){
      case R.id.iv_select:
        //点击弹出列表
        showNumberList();
        break;
    }
  }
  //listView填充
  class MyAdapter extends BaseAdapter{
    @Override
    public int getCount() {
      return list.size();
    }
    @Override
    public Object getItem(int position) {
      return null;
    }
    @Override
    public long getItemId(int position) {
      return 0;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
      final View view = View.inflate(MainActivity.this, R.layout.item_list, null);
      tv_number = (TextView) view.findViewById(R.id.tv_number);
      iv_delete = (ImageView) view.findViewById(R.id.iv_delete);
      tv_number.setText(list.get(position));
      //删除按键
      iv_delete.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
          //删除条目
          list.remove(position);
          //更新页面
          notifyDataSetChanged();
          //根据当前条目的个数设置,当前条目的高度
          int listViewHeight = list.size() * view.getHeight();
          if(listViewHeight > 300){
            listViewHeight = 300;
          }else{
            listViewHeight = listViewHeight;
          }
          //更新泡泡窗的高度
          popupWindow.update(et.getWidth(), listViewHeight);
          //删除完了,泡泡窗小消失
          if(list.size() == 0){
            popupWindow.dismiss();
            //下拉条消失
            iv_select.setVisibility(View.GONE);
          }
        }
      });
      return view;
    }
  }
} 

以上所述是小编给大家介绍的Android仿泡泡窗实现下拉菜单条实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android编程实现二级下拉菜单及快速搜索的方法

    本文实例讲述了Android编程实现二级下拉菜单及快速搜索的方法.分享给大家供大家参考,具体如下: 一.我们要做什么? 上面有个搜索框,下面是一个二级下拉菜单. 输入查询内容,下面列表将显示查询结果. 二.界面设计 (1)这是主框架(部分属性已经省去,请看源码),从上至下分别是文本框,列表,二级列表. <?xml version="1.0" encoding="utf-8"?> <LinearLayout> <LinearLayout

  • android使用PopupWindow实现页面点击顶部弹出下拉菜单

    实现此功能没有太多的技术难点,主要通过PopupWindow方法,同时更进一步加深了PopupWindow的使用,实现点击弹出一个自定义的view,view里面可以自由设计,比较常用的可以放一个listview. demo中我只是一个点击展示,简单的使用了fade in out的动画效果,也没有精美的图片资源,看着也丑,不过这么短的时间,让你掌握一个很好用的技术,可以自己扩展,不很好么? 废话不说了,直接上代码: MainActivity.java public class MainActivi

  • Android Spinner 下拉菜单的使用

    Android 中下拉菜单,即如html中的<select>,关键在于调用setDropDownViewResource方法,以XML的方式定义下拉菜单要显示的模样 步骤: 1.定义Spinner控件 复制代码 代码如下: <Spinner android:id="@+id/spinner"android:layout_width="fill_parent"android:layout_height="wrap_content"

  • Android仿美团下拉菜单(商品选购)实例代码

    美团电商应用平台大家使用非常频繁,下面小编通过本文给大家介绍电商应用平台中常用的选择类别下拉列表的实现.先给大家展示下效果图: 一.下拉列表的实现 其实实现方法有很多,这时实现的也没有什么技术含量,只是总结下自己在项目中的做法,也提供一个思路. 首先是列表的数据,一般数据都是从后台读过来,这里因为没有后台,所以写死在客户端: private void initMenuData() { menuData = new ArrayList<map<string, string=""

  • android 之Spinner下拉菜单实现级联

    效果图如下: 默认第一次加载 选择原始队列: 级联效果图: 关键代码给下拉列表选中事件监听绑定Id : 复制代码 代码如下: int pos = firsthand_dlbh_pinner.getSelectedItemPosition();firsthand_pdbh_adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, queu_info[pos]);firsthand_pdbh_

  • Android仿泡泡窗实现下拉菜单条实例代码

    功能描述:点击下拉按钮,显示出所有的条目,有删除和点击功能,点击后将条目显示. 注意:泡泡窗默认是没有焦点的.要让泡泡窗获取到焦点.假如listview的item中有Button,ImageButton,CheckBox等会强制获取焦点的view 此时,listview的item无法获取焦点,从而无法被点击 解决方法:给item的根布局增加以下属性 Android:descendantFocusability="blocksDescendants"设置之后,Button获取焦点,ite

  • React Native仿美团下拉菜单的实例代码

    本文介绍了React Native仿美团下拉菜单的实例代码,最近也在学习React Native,顺便分享给大家 在很多产品中都会涉及到下拉菜单选择功能,用的最好的当属美团了,其效果如下: 要实现上面的效果,在原生中比较好做,直接使用PopWindow组件即可.如果使用React Native开发上面的效果,需要注意几个问题: 1. 在下拉的时候有动画过度效果: 2.下拉菜单出现后点击菜单项,菜单项可选择,并触发对应的事件: 3.下拉菜单中的项目可以配置: 要实现弹框效果,我们马上回想到使用Mo

  • JavaScript下拉菜单功能实例代码

    本文给大家分享一段实例代码关于js实现下拉菜单功能,具体代码如下所示: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>下拉菜单</title> <style type="text/css"> body, ul, li { margin: 0; padding: 0; fo

  • jQuery实现下拉菜单的实例代码

    基本效果是这样的~~ <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } ul { list-style: none; } .wrap { width:

  • jquery多级树形下拉菜单的实例代码

    效果图: 使用方法 (1)引入 jQuery 包,下载地址 (2)引入 zTree 包,下载地址 (3)引入 tree-select.js (4)$("#id").treeSelect(data); <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>TreeSelect</title>

  • jquery实现多级下拉菜单的实例代码

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>jquery实现多级下拉菜

  • Bootstrap下拉菜单效果实例代码分享

    下拉菜单Dropdown不是表单中<select><option value=''></option></select>那种啊,而是导航条中常见的那种. Bootstrap官方网站对下拉菜单Dropdown的解释很少,即使是他们的英文官方网站. 对于如何更改下拉菜单的背景颜色.如果对下拉菜单默认的黑色超级链接进行修改,如何把下拉菜单更改成普通的超级链接而不是文字的样式,官方网站是完全没有具体的解释. 而且,官方网站的超级链接代码杂糅着许多没有用的参数. 笔者

  • Android编程之ICS式下拉菜单PopupWindow实现方法详解(附源码下载)

    本文实例讲述了Android编程之ICS式下拉菜单PopupWindow实现方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 右边这个就是下拉菜单啦,看见有的地方叫他 ICS式下拉菜单,哎哟,不错哦! 下面先讲一下实现原理: 这种菜单实际上就是一个弹出式的菜单,于是我们想到android PopupWindow 类,给他设置一个view 在弹出来不就OK了吗. PopupWindow 的用法也很简单 主要方法: 步骤1.new 一个实例出来,我们使用这个构造方法即可, 复制代码 代码如

  • Android仿百度外卖自定义下拉刷新效果

    现如今的APP各式各样,同样也带来了各种需求,一个下拉刷新都能玩出花样了,前两天订饭的时候不经意间看到了"百度外卖"的下拉刷新,今天的主题就是它–自定义下拉刷新动画. 看一下实现效果吧: 动画 我们先来看看Android中的动画吧: Android中的动画分为三种: Tween动画,这一类的动画提供了旋转.平移.缩放等效果. Alpha – 淡入淡出 Scale – 缩放效果 Roate – 旋转效果 Translate – 平移效果 Frame动画(帧动画),这一类动画可以创建一个D

  • 通用无限极下拉菜单的实现代码

    下拉菜单在我开发中经常遇到,但是没个项目都需要从新编写,改起来虽然简单但是很麻烦,我这个人还是比较懒的,今天有时间把我以前的项目开发中的菜单整理一遍,编写一个通用版本,以后就不需要那么麻烦了. 特点 今天整理的菜单是由jquery+css开发有如下特点: 一.通用性强 以前在用的一个下拉菜单有个问题,需要对主导航和子菜单进行单独的设置,比如,二级菜单是class="first_menu",三级菜单是class="second_menu"....依次类推,这样的写法有

随机推荐