我有以下代码,每次触摸我的“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;
}
});
关于java - EditText、OnTouchListener 和 setSelection 在第一次触摸时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24335853/