[英]EditText, OnTouchListener and setSelection doesn't work on first touch
我有以下代码,每次触摸我的“redTime”EditText时都会触发。
redTime.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i("click", "onMtouch");
redTime.setSelection(redTime.getText().length());
return false;
}
});
它意味着在每次触摸时将光标保持在EditText的右侧。 问题是包含“setSelection”方法的行在第一次触摸控件时不起作用。 也就是说,如果另一个控件具有焦点,并且我第一次触摸“redTime”控件,则触发该方法,但是光标保持在我触摸的位置(而不是右侧)。
我如何知道听众的火灾? “Log.i”调用有效,但光标没有变化。 我怀疑“setSelection”调用正在运行,但后来的一些事件正在否定它。
我试了几件事。 我尝试通过在侦听器中返回TRUE来使用该事件。 没工作。 我尝试在OnTouchListener和OnFocusChanged中重复“setSelection”调用。 仍然无法正常工作。
我差点忘了。 这是有问题的控件的XML。
<EditText
android:id="@+id/redEditText"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:ellipsize="end"
android:gravity="right"
android:inputType="time"
android:text="@string/zeroTime"
android:textColor="#ff0000"
android:textSize="32sp" >
</EditText>
我最近遇到了这个问题并且无法正常工作,所以最终做到了这一点:
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
postDelayed(new Runnable() {
@Override
public void run() {
setSelection(getText().length());
}
}, 50);
return false;
}
});
只需将edittext放在下面
<EditText
android:id="@+id/from"
android:focusable="false"
android:hint="@string/pickup_location"
android:imeOptions="actionNext"
android:inputType="textNoSuggestions"
android:padding="10dp"
android:textColor="@android:color/white" />
在活动中设置ontouch侦听器
EditText et = (EditText)findViewById(R.id.et); et.setOnTouchListener(this)
@Override public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP)
switch (v.getId()) {
case R.id.from:
//do your action
break;
使用此方法:
redTime.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_UP){ //check the event
redTime.requestFocus(); //keep focus on the EditText(redTime)
redTime.selectAll(); //select all text
}
}
return true;
});
你可以做到
redTime.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i("click", "onMtouch");
redTime.setFocusable(true);
redTime.requestFocus();
redTime.setSelection(redTime.getText().length());
return false;
}
});
在调用setSelection
之前, redTime
将在您进行选择时获得焦点。
为了避免错误,请执行以下操作:
yourEditText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
yourEditText.setFocusable(true);
yourEditText.requestFocus();
yourEditText.setSelection(emailEditText.getText().length());
break;
case MotionEvent.ACTION_UP:
v.performClick();
break;
default:
break;
}
return true;
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.