将焦点从一个EditText移动到另一个EditText
我为创建帐户活动设计了一个布局。
当一个EditText
失去焦点时,我正在对输入进行一些检查,如果出现问题,我想重新关注EditText
。
我已经看到了一些关于这个的问题,但它不适合我(或者我做错了什么)。
当我触摸一个触发requestFocus()的不同EditText时,焦点仍然在当前的EditText
而另一个焦点图标显示在EditText
,它会重新显示焦点。
请帮忙
这是我的布局文件:
在我喜欢的代码中:
final EditText userEditText = (EditText)findViewById(R.id.userEditText); userEditText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(!hasFocus){ Log.i(TAG, "userEditText lost focus"); m_userName = userEditText.getText().toString(); if(m_userName.length() < 6){ m_signUpText.setText("Username should have at least 6 characters"); userEditText.requestFocus(); } else{ checkUserNameExists(); } } } });
您可以在第一个EditText上侦听此动作EditorInfo.IME_ACTION_NEXT
,然后通过此调用requestFocus()
请求焦点到第二个,这是一个示例:
firstEditText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_NEXT) { secondEditText.requestFocus(); return true; } return false; } });
在这里找到了解决方案
这个解决方案有效(无需添加android:focusable =“true”\ android:focusableInTouchMode =“true”):
final EditText userEditText = (EditText)findViewById(R.id.userEditText); userEditText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(!hasFocus){ Log.i(TAG, "userEditText lost focus"); if(null == m_requestFocus){ m_userName = userEditText.getText().toString(); if(m_userName.length() < 6){ m_signUpText.setText("Username should have at least 6 characters"); m_requestFocus = userEditText; } else{ checkUserNameExists(); } } } else{ if(null != m_requestFocus & m_requestFocus != userEditText){ v.clearFocus(); m_requestFocus.requestFocus(); m_requestFocus = null; } } } });
澄清问题:
用户编辑EditText A - >用户触摸EditText B进行编辑 - > EditText调用onFocusListener.onFocusChanged - > EditText一个requestFocus - > EditText B仍然具有焦点并键入任何文本,写入其编辑文本。 EditText A上只显示焦点标记。
首先,你为什么提供
android:focusable="true" android:focusableInTouchMode="true"
要布局,而不是EditText
字段?
第二个 – 来自dev.andro的requestFocus()
定义:“调用它来尝试将焦点放在特定视图或其后代之一上。”
结论将是一个问题,因为我很难理解你所说的。 这是有效的,重点是留在userEditText
但是其他一些EditText
有焦点View的选择器?
这适用于我,它看起来不那么hackish。
所做的是将Runnable中的requestFocus()发送到进程消息队列。 与上面的链接不同,我不需要清除其他字段的焦点,也不需要postDelayed。 我的代码
new Handler().post(new Runnable() { @Override public void run() { ev1.requestFocus(); } });
- 将JSON解析为cofigure android应用程序
- 使用Android的颜色填充ArrayList
- ANDROID ZXING:在onPreviewFrame中保存照片每帧都会保存一张照片。 如何在扫描时保存单张照片?
- Javacard初学者 – 问题
- 错误:此类应提供默认构造函数(…)
- 计算缺失数量
- Paho Mqtt Android连接到经纪人失败(32103)
- TYPE_PHONE覆盖视图不允许子GridView捕获onItemClick事件
- 尝试从我的android java应用程序调用web服务时android.os.NetworkOnMainThreadExceptionexception?