使用带有可选文本的onView on TextView - 如何避免双击?

时间:2014-03-26 06:56:17

标签: android onclick textview onclicklistener

这很奇怪,但是如果你在一个 TextView (或不可编辑的EditText)上放一个onClickListener,它有android:textIsSelectable="true" - 它不需要一次点击,而是两次。 我在3部手机上进行了检查,所有这些手机只在第二次点击后执行 onClick

当然,如果您点击focusable="false"android:textIsSelectable="false",则可以从第一次点按,但文字选择不起作用。

请帮我解决这个问题

5 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,很难提出并寻求解决方案。

除了双击行为之外,我还注意到以下两件事:

  • 如果您真的双击(快速)使用textIsSelectable的TextView,它会选择您点击的单词,即使焦点位于其他内容上,这意味着该视图也以某种方式记录了第一次触摸。 / LI>
  • 如果您在焦点位于其他位置时长时间点击,它会起作用并启动选择操作模式,就像它已经聚焦一样

以下是我如何设法让它发挥作用。它并不漂亮,但到目前为止一切正常:在XML中,您只需要添加textIsSelectable,而不是其他focusable / focusableInTouchMode / clickable / {需要{1}}个属性;那么你需要两个听众,一个是现有的enabled,但需要双重拍摄,另一个是onClick你可以处理特殊的第一次点击

onFocusChange

以下是相关问题中的alternative solution,我不喜欢甚至不尝试:将TextView包装在FrameLayout中并将侦听器添加到其中。

这是另一个related question,它有更多解决方案。

答案 1 :(得分:1)

将XML设置为TextView

android:textIsSelectable="true"

之后将onTouchListener设置为TextView,然后执行此操作:

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

它为TextView上的每次点击设置了焦点。 毕竟将onClickListener设置为TextView。

我的自定义RecyclerView.Adapter的Holder遇到了同样的问题。所以,如果你需要,我会为你剪掉它:

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;
    }
}

答案 2 :(得分:0)

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

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

这将保持选择和取消选择文本的能力,而无需调用onClick事件。

答案 3 :(得分:-1)

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

禁用setEnabled(false)按钮,直到用户再次点击它为止是安全的。

May this helpful to you

答案 4 :(得分:-2)

试试这个。

在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.
       }        
});