【问题标题】:How to disable paste in onClickListener for the Drawable right of an EditText Android (inside icon EditText)如何为 EditText Android 的 Drawable 权限禁用 onClickListener 中的粘贴(在图标 EditText 内)
【发布时间】:2016-07-16 13:31:28
【问题描述】:

我有 EditText 和里面的图标

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

我将onClickListener 设置为Drawable 右侧的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


【解决方案1】:

嗯,已经快 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;
    }

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      只需将 android:longClickable="false" 设置为编辑框即可。

      【讨论】:

        【解决方案4】:

        您可以查看this 问题并了解如何禁用粘贴

        但我建议您使用其他方法,而不是禁用粘贴,您可以通过不同的方式执行此操作。查看 whatsapp 的 麦克风按钮 + EditText 位置,我注意到它们是两个不同的元素,这就是你可以做的。将您的EditText 包裹在水平的LinearLayout 中,并在右端放置一个带有麦克风的按钮。我希望你能设法让它发挥作用,并且你理解我的想法。

        【讨论】:

          猜你喜欢
          • 2012-10-19
          • 1970-01-01
          • 1970-01-01
          • 2011-09-10
          • 2018-02-24
          • 2021-02-17
          • 2014-11-28
          • 1970-01-01
          相关资源
          最近更新 更多