这很奇怪,但是如果你在一个带有android:textIsSelectable="true"
的TextView(或不可编辑的EditText)上放一个onClickListener - 它不需要一次点击,而是两次。我在3部手机上检查了它,所有这些都只在第二次点击后执行onClick。
当然,如果你制作focusable="false"
或android:textIsSelectable="false"
它可以从第一次点击,但文本选择不起作用。
请帮我解决这个问题
我有同样的问题,很难提出并寻找解决方案。
除了双击行为之外,我还注意到以下两件事:
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包装在FrameLayout中并添加侦听器。
这是另一个有更多解决方案的related question。
在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;
}
}
使用onTouchListener
检测点击并将其重定向到容器视图:
textView.setOnTouchListener { _, event ->
if (event.action == 1 && !textView.hasSelection()) {
containerView.callOnClick()
}
false
}
这将保留在不调用onClick
事件的情况下选择和取消选择文本的功能。
android:longClickable="false"
android:clickable="false"
使用setEnabled(false)
禁用该按钮,直到用户再次单击它是安全的。
试试这个。
在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.
}
});