EditText,OnTouchListener和setSelection在第一次触摸时不起作用

mcs*_*vio 2 java user-interface android android-edittext

我有以下代码,每次触摸我的"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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

它意味着在每次触摸时将光标保持在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>
Run Code Online (Sandbox Code Playgroud)

小智 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;
        }
    });
Run Code Online (Sandbox Code Playgroud)