如何在onClickListener中为EditText Android的Drawable权限禁用粘贴(在图标EditText内)

问题描述 投票:2回答:4

我里面有EditText和图标

<EditText
    android:id="@+id/myedittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:drawableRight="@mipmap/microphone"/>

我为onClickListenerDrawable设置了EditText

myeditText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            final int DRAWABLE_LEFT = 0;
            final int DRAWABLE_TOP = 1;
            final int DRAWABLE_RIGHT = 2;
            final int DRAWABLE_BOTTOM = 3;

            if(event.getAction() == MotionEvent.ACTION_UP) {
                if(event.getRawX() >= (myeditText.getRight() - myeditText
      .getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {  
                    // your action here
                    Toast.makeText(getApplicationContext(),
                            "speak",Toast.LENGTH_SHORT).show();
                    return true;
                }
            }
            return false;
        }
    });

当我点击EditText Toast右边的图标显示我并且工作,但是也显示我在EditText上粘贴选项。如何在右键单击图标时删除粘贴?

android android-widget
4个回答
1
投票

在我的情况下,从ACTION_UP改为ACTION_DOWN生效。当然,行为轻微改变了。并且光标仍会跳到文本的末尾。


0
投票

你可以看看this问题,看看如何禁用粘贴。

但是我建议别的东西,而不是禁用粘贴,你可以用不同的方式做到这一点。看看whatsapp的麦克风按钮+ EditText放置,我注意到它们是两个不同的元素,这就是你可能会做的。将你的EditText包裹在水平的LinearLayout中并在右端放置一个带麦克风的按钮。我希望你能设法使它发挥作用,并且你理解我的想法。


0
投票

只需将android:longClickable =“false”设置为editbox即可。


0
投票

好吧,已经有3年了。但是,对于像我这样可能面临这一挑战的人:解决方案是在ACTION_DOWN中返回true,但只在ACTION_DOWN上调用侦听器,同样返回true。在这种情况下,首先检查点击的区域是否与图标的区域相对应,然后再继续向上或向下检查操作:

@Override
public boolean onTouch(View v, MotionEvent event) {
        final int DRAWABLE_LEFT = 0;
        final int DRAWABLE_TOP = 1;
        final int DRAWABLE_RIGHT = 2;
        final int DRAWABLE_BOTTOM = 3;


        if (event.getRawX() >= (myeditText.getRight() - myeditText
                .getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                // your action here
                listener.onClick(v);
                return true;
            }

            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                return true;
            }
        }

        return false;
    }
© www.soinside.com 2019 - 2024. All rights reserved.