监听android:drawableLeft和android:drawableRight点击事件

标签: android
62人阅读 评论(0) 收藏 举报
分类:
监听android:drawableLeft和android:drawableRight点击事件


Android官方没有提供对android:drawableLeft和android:drawableRight点击事件的监听,但有些情况下,如下面的搜索栏,


需要在用户输入字符点击左侧的搜索图标后触发搜索事件,而此搜索icon是通过android:drawableLeft添加的,此时就需要对android:drawableLeft上去的icon进行事件监听。我写了一个工具DrawableUtil类,对android:drawableLeft和android:drawableRight进行监听。

import android.graphics.drawable.Drawable;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

public class DrawableUtil {

    /**
     * TextView四周drawable的序号。
     * 0 left,  1 top, 2 right, 3 bottom
     */
    private final int LEFT = 0;
    private final int RIGHT = 2;

    private OnDrawableListener listener;
    private TextView mTextView;

    public DrawableUtil(TextView textView, OnDrawableListener l) {
        mTextView = textView;
        mTextView.setOnTouchListener(mOnTouchListener);
        listener = l;
    }

    public interface OnDrawableListener {
        public void onLeft(View v, Drawable left);

        public void onRight(View v, Drawable right);
    }

    private View.OnTouchListener mOnTouchListener = new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_UP:
                    if (listener != null) {
                        Drawable drawableLeft = mTextView.getCompoundDrawables()[LEFT];
                        if (drawableLeft != null && event.getRawX() <= (mTextView.getLeft() + drawableLeft.getBounds().width())) {
                            listener.onLeft(v, drawableLeft);
                            return true;
                        }

                        Drawable drawableRight = mTextView.getCompoundDrawables()[RIGHT];
                        if (drawableRight != null && event.getRawX() >= (mTextView.getRight() - drawableRight.getBounds().width())) {
                            listener.onRight(v, drawableRight);
                            return true;
                        }
                    }

                    break;
            }

            return false;
        }

    };
}



使用DrawableUtil,在构造时候传递一个OnDrawableListener即可完成监听,如:
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class DrawableActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drawable_activity);
        TextView textView = findViewById(R.id.text);

        DrawableUtil drawableUtil = new DrawableUtil(textView, new DrawableUtil.OnDrawableListener() {
            @Override
            public void onLeft(View v, Drawable left) {
                Toast.makeText(getApplicationContext(), "left", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onRight(View v, Drawable right) {
                Toast.makeText(getApplicationContext(), "right", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

注意要对xml布局中的TextView添加事件属性为true:

android:clickable="true"
查看评论

用Visual C++开发数据库应用程序

用Visual C++开发数据库应用程序EMAIL:zzh1415@21cn.com1、 概述1、1 Visual C++开发数据库技术的特点Visual C++提供了多种多样的数据库访问技术——OD...
  • zzh
  • zzh
  • 2000-08-09 17:04:00
  • 989

为你的drawable图片添加监听事件----drawableRight增加监听事件

在android的应用开发中,我认为添加drawable类型的图片非常好用。为TextView或者EditText添加一个drawableLeft图片或者drawableRight图片非常方便,在一些...
  • wz249863091
  • wz249863091
  • 2015-11-17 20:59:25
  • 3116

Android 设置DrawableRight和DrawableLeft点击事件

Android的TextView有个DrawableLeft和DrawableRight属性,UI布局中经常会用到。比如登陆界面,用户名和密码前面的图像,就是用DrawableLeft来设置的。 ...
  • dszgf5717
  • dszgf5717
  • 2017-06-28 16:03:17
  • 390

Android 设置DrawableRight和DrawableLeft 点击事件

/** * 加强版的EditText,可以响应DrawableLeft 和 DrawableRight的点击事件 * 要实现响应点击,先设置setDrawableListener * @author...
  • lib739449500
  • lib739449500
  • 2015-12-09 15:06:47
  • 4032

Android 设置DrawableRight和DrawableLeft 的通用点击事件

package com.lb.frame.views; import android.annotation.SuppressLint; import android.content.Context;...
  • u010514478
  • u010514478
  • 2016-11-18 15:23:14
  • 1410

drawableRight中图标的点击事件

android 解决drawableRight属性的图标点击事件
  • u014128885
  • u014128885
  • 2015-04-19 19:43:51
  • 2857

自定义EditText 实现drawableRight/drawableLeft 点击事件

我们在开发APP布局时候经常会看到在EditText的右侧或者左侧出现类似如下的ICON 以前常用的做法是在最外层使用RelativeLayout包裹内部的ImagView与EditText:...
  • zcmain
  • zcmain
  • 2016-11-22 13:46:06
  • 896

给EditText左右两边设置图片与监听(drawableLeft/drawableRight)/弹出键盘

设置图片: Drawable phoneDrawableLeft = getResources().getDrawable(R.mipmap.phone_login, null); p...
  • ZionLife
  • ZionLife
  • 2017-04-24 21:24:54
  • 646

给TextView的drawableRight属性设置点击事件

由于需求,要给TextView的drawableRight图片设置点击事件 其实更多的可能是EditText,像登录框那样的,其实都一样 上代码/** * Created by great小...
  • sinat_35670989
  • sinat_35670989
  • 2016-11-30 18:15:28
  • 2728

android drawableRight图标点击事件

  • 2015年04月19日 20:17
  • 1.39MB
  • 下载
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 176万+
    积分: 2万+
    排名: 393
    关于我
    邮箱: zhangphil@live.com
    博客专栏
    最新评论