Android实现可编辑下拉菜单

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

在Android里,直接提供的Spinner控件虽然可以实现下拉菜单的效果,但其效果并不理想,很多时候我们需要类似手机QQ那样既可以在文本框中直接输入编辑文字,可以在下拉菜单中选中或者删除菜单选项,并且下拉菜单并不是以遮罩整个手机屏幕方式,而是以浮动在屏幕上的效果出现。下面呢,就来实现一下这些效果。

此次主要以EdiText、PopupWindow、ListView及Adapter来实现这种下拉效果。具体实现步骤就不一步步详细介绍了,直接贴完整代码吧,注释比较详细,相信都能看得懂。

 

Activity代码:


package com.zw.select;

import java.util.ArrayList;

import android.app.Activity;

import android.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

import android.os.Handler;

import android.os.Handler.Callback;

import android.os.Message;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.LinearLayout.LayoutParams;

import android.widget.ListView;

import android.widget.PopupWindow;

 

//主界面Activity

public class SelectActivity extends Activity implements Callback {

    //PopupWindow对象

    private PopupWindow selectPopupWindow= null;

    //自定义Adapter

    private OptionsAdapteroptionsAdapter = null;

    //下拉框选项数据源

    private ArrayList<String> datas = new ArrayList<String>();;

    //下拉框依附组件

    private LinearLayout parent;

    //下拉框依附组件宽度,也将作为下拉框的宽度

    private int pwidth;

    //文本框

    private EditText et;

    //下拉箭头图片组件

    private ImageView image;

    //恢复数据源按钮

    private Button button;

    //展示所有下拉选项的ListView

    private ListView listView = null;

    //用来处理选中或者删除下拉项消息

    private Handler handler;

    //是否初始化完成标志 

    private boolean flag = false;

   

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.select);

    }

 

    /**

     * 没有在onCreate方法中调用initWedget(),而是在onWindowFocusChanged方法中调用,

     * 是因为initWedget()中需要获取PopupWindow浮动下拉框依附的组件宽度,在onCreate方法中是无法获取到该宽度的

     */

    @Override

    public void onWindowFocusChanged(boolean hasFocus) {

       super.onWindowFocusChanged(hasFocus);

       while(!flag){

           initWedget();

           flag = true;

       }

      

    }

   

    /**

     * 初始化界面控件

     */

    private void initWedget(){

       //初始化Handler,用来处理消息

       handler = new Handler(SelectActivity.this);

      

       //初始化界面组件

      

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值