使用“setCompoundDrawables”和TextWatcher在EditText中显示微调器

时间:2014-08-30 01:30:46

标签: android android-edittext textwatcher

我试图在EditText上实现此效果:

Spinner

使用TextWatchersetCompoundDrawables

这是我的代码:

    searchEditText = (EditText) findViewById(R.id.editText_search);

    searchEditText.addTextChangedListener(new TextWatcher() 
    {
        CountDownTimer timer = new CountDownTimer(800, 800)
        {
            @Override
            public void onTick(long millisUntilFinished) 
            {
            }

            @Override
            public void onFinish() 
            {
                Log.i("SearchActivity", "searching..");
            }
        };

        @Override
        public void afterTextChanged(Editable arg0) 
        {
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
        {
            timer.cancel();
            timer.start();

            //This is not working:
            searchEditText.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_menu_call, 0, 0, 0);
        }

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) 
        {
            searchEditText.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_menu_search, 0, 0, 0);
        }
    });

在代码中,我评论了什么不起作用:" //这不起作用"

我有两个问题:

  1. 我应该使用什么drawable用于动画微调器/加载? android.R.drawable。的什么

  2. 使用我选择的测试图标(ic_menu_call)无效。我总是看到搜索图标,而不是"电话"图标。

  3. 我想在用户输入时看到其他非搜索图标(微调器)

1 个答案:

答案 0 :(得分:1)

问题是beforeTextChangedonTextChanged发生得太快,以致EditText没有时间将drawable从一个改为另一个,从而只给你添加的最后一个drawable ic_menu_search

<强>溶液

使用你的计时器来改变drawable,给edditText一些时间来改变它内部的drawable。

<强>样品:

final EditText searchEditText = new EditText(this);

    searchEditText.addTextChangedListener(new TextWatcher() 
    {
        CountDownTimer timer = new CountDownTimer(1000, 800)
        {
            @Override
            public void onTick(long millisUntilFinished) 
            {
                searchEditText.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_menu_call, 0, 0, 0);

            }

            @Override
            public void onFinish() 
            {
                Log.i("SearchActivity", "searching..");
                searchEditText.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_menu_search, 0, 0, 0);
            }
        };

        @Override
        public void afterTextChanged(Editable arg0) { }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
        {
            timer.cancel();
            timer.start();
        }

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { }
    });

如您所见,我将您的计时器持续时间设置为 1秒,以便EditText有时间更改回另一个可绘制的。

对于问题1和2,您无法将View添加到setCompoundDrawablesWithIntrinsicBounds,它只需要您的drawable文件夹或android默认drawable文件夹中的drawable或bitmap。