这很奇怪,但是如果你在一个 TextView (或不可编辑的EditText)上放一个onClickListener,它有android:textIsSelectable="true"
- 它不需要一次点击,而是两次。
我在3部手机上进行了检查,所有这些手机只在第二次点击后执行 onClick 。
当然,如果您点击focusable="false"
或android:textIsSelectable="false"
,则可以从第一次点按,但文字选择不起作用。
请帮我解决这个问题
答案 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)
按钮,直到用户再次点击它为止是安全的。
答案 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.
}
});