我每次触摸“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>
答案 0 :(得分:5)
我最近遇到了这个问题,无法解决任何问题,所以最终做到了这一点:
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
postDelayed(new Runnable() {
@Override
public void run() {
setSelection(getText().length());
}
}, 50);
return false;
}
});
答案 1 :(得分:3)
只需将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;
答案 2 :(得分:2)
使用此方法:
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;
});
答案 3 :(得分:1)
你可以做到
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
之前,{E-1}}会在您进行选择时获得焦点。
答案 4 :(得分:1)
为避免错误,请执行以下操作:
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;
}
});