如何检测EditText由Android获得焦点.不是最终用户触摸编辑文本?

Loc*_*Loc 6 android focus onfocus autofocus android-edittext

一个android.widget.EditText可以通过2个原因获得焦点,因为我知道:

案例1.最终用户按目的触摸编辑文本.

案例2.系统自动提供编辑文本.

  • 导航
  • 第一个默认焦点
  • ...

我的问题是: 如何才能检测到案例2?(事件监听器?)

我想要检测案例2的原因是:我想设置当前位置是编辑文本通过案例2获得焦点的最后位置.

EditText.setOnFocusChangeListener适用于case1,case2所以看来我不能使用它.

谢谢!

sbe*_*zin 9

更新了您的活动中的
实现android.view.View.OnFocusChangeListener(例如)和设置yourView.setOnFocusChangeListener(yourActivity)
如果您将其与之结合使用,OnTouchListener则可以过滤掉用户触摸,因为首先调用onTouch() - 您可以设置布尔类成员.确保在焦点丢失时重置该布尔值.

代码应该有点像这样:

...
import android.view.View.OnFocusChangeListener;

...

public class MainActivity extends Activity implements OnFocusChangeListener, OnTouchListener {

    boolean userTouchedView;

    @Override
    public View onCreateView(...) {
        ...
        yourView.setOnFocusChangeListener(this);
        ...
    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus && !userTouchedView)) {
            //YOUR CASE 2
        }
        else if(!hasFocus)
            userTouchedView=false;
    }

    @Override
    public boolean onTouch(final View v, MotionEvent event) {
        if(v==yourView){
            userTouchedView=true;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)