您现在的位置是:首页 > 文章详情

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

日期:2018-04-16点击:461
监听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"
原文链接:https://yq.aliyun.com/articles/615687
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章