android 使用onClick在文本视图与可选文本-如何避免双击?

u7up0aaq  于 2022-12-25  发布在  Android
关注(0)|答案(5)|浏览(249)

这很奇怪,但如果你把一个onClickListener放在一个TextView(或不可编辑的EditText)上,它有android:textIsSelectable="true"-它需要不是一个点击,而是两个。我检查了3个手机,它们都只在第二次点击后执行***onClick***。
当然,如果你使用focusable="false"android:textIsSelectable="false",它从第一次点击开始工作,但是文本选择不起作用。
请帮我解决这个问题

zu0ti5jz

zu0ti5jz1#

在XML中设置为TextView

android:textIsSelectable="true"

然后将onTouchListener设置为您的TextView,并在其中执行以下操作:

if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) view.requestFocus();

它为TextView上的每一次点击设置焦点。毕竟,将onClickListener设置为您的TextView
我的RecyclerView.Adapter中有一个ViewHolder也有同样的问题。所以,如果你需要的话,我为你剪下它:

class RollHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnTouchListener {

    private TextView textView;

    RollHolder(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.text_view);
        textView.setOnClickListener(this);
        textView.setOnTouchListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.text_view:
                // Do here that you need
                break;
        }
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (view.getId()){
            case R.id.text_view:
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) view.requestFocus();
                break;
        };
        return false;
    }
}
watbbzwu

watbbzwu2#

我也有同样的问题,很难问和寻找解决办法。
除了双击行为之外,我还注意到以下两点:

  • 如果你真的用textIsSelectable双击TextView(快速),它会选择你点击的单词,即使焦点在其他东西上,这意味着视图也会以某种方式注册第一次触摸。
  • 如果焦点在别处时你长按,它工作并开始选择动作模式,就好像它已经被聚焦一样

下面是我如何让它工作的。它并不漂亮,但到目前为止一切都很好:在XML中,您只需要添加textIsSelectable,而不需要添加其他focusable/focusableInTouchMode/clickable/enabled属性;那么您需要两个侦听器,一个是现有的onClick,它可以工作,但需要两次接收,另一个是onFocusChange,您可以在其中处理异常的第一次敲击

hint = (TextView)view.findViewById(R.id.hint);
hint.setOnClickListener(new OnClickListener() {
    @Override public void onClick(View v) {
        handleHintClick();
    }
});
hint.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) { handleHintClick(); }
    }
});

下面是一个相关问题中的alternative solution,我不喜欢,甚至没有尝试:将TextView Package 在FrameLayout中并向其中添加侦听器。
这是另一个related question,它有更多的解决方案。

yftpprvb

yftpprvb3#

使用onTouchListener检测点击并将其重定向到容器视图:

textView.setOnTouchListener { _, event ->
    if (event.action == 1 && !textView.hasSelection()) {
        containerView.callOnClick()
    }
    false
}

这将保留在不调用onClick事件的情况下选择和取消选择文本的能力。

jfewjypa

jfewjypa4#

android:longClickable="false"
android:clickable="false"

使用setEnabled(false)禁用该按钮,直到用户可以安全地再次单击它。
May this helpful to you

lokaqttq

lokaqttq5#

试试这个。
用于XML文件

android:onclick"your Name"//for example I used "onImageListClick"

    public void onImageListClick(View view)
        {
             //do your task.
            //Intent intent = new Intent(this, ImageListActivity.class);
            //intent.putExtra(Extra.IMAGES, IMAGES);
            //startActivity(intent);
        }

txtboxname.setOnClickListener(new View.OnClickListener() {
   @Override
    public void onClick(View arg0) {
////do you task.
       }        
});

相关问题