使用不同的 inputType 从一个edittext请求焦点到另一个
Posted
技术标签:
【中文标题】使用不同的 inputType 从一个edittext请求焦点到另一个【英文标题】:Request focus from an edittext to another with a different inputType 【发布时间】:2012-09-20 14:24:23 【问题描述】:我必须像这些不同的 EditText :
EditText1 的 inputType 为“textCapWords” EditText2 的 inputType 为“数字”当我启动我的活动时,我立即请求关注 EditText1。这样做的唯一方法是将其添加到 onCreate :
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
EDITTEXT1.requestFocus();
当用户在他的软键盘上单击“返回”时,我希望 EDITTEXT2 获得焦点。所以我添加了这个:
EDITTEXT1.setOnKeyListener(new OnKeyListener()
public boolean onKey(View v, int keyCode, KeyEvent event)
if (keyCode == 66) // CODE FOR RETURN
EDITTEXT2.requestFocus();
return false;
);
但是当我这样做时,什么都没有发生。我所有的 EditText 都设置了 FocusableInTouchMode 和 Focusable :
<EditText
android:id="@+id/EDITTEXT1"
android:layout_
android:layout_
android:layout_weight="2"
android:background="@color/White"
android:ems="10"
android:hint="My First EditText"
android:inputType="textCapWords"
android:padding="2dip"
android:singleLine="true"
android:textColor="@color/Black"
android:textSize="12dip" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/EDITTEXT2"
android:layout_
android:layout_
android:layout_weight="2"
android:background="@color/White"
android:ems="10"
android:hint="My Second EditText"
android:inputType="textCapWords"
android:padding="2dip"
android:singleLine="true"
android:textColor="@color/Black"
android:textSize="12dip" >
</EditText>
您对在 EDITTEXT1 上按 OK 后如何聚焦 EDITTEXT2 有任何想法吗?
提前致谢!
【问题讨论】:
【参考方案1】:非常感谢您的回答。我终于找到了回答我自己问题的最简单方法:
添加:
android:nextFocusRight="@+id/EDITTEXT2"
到 EDITTEXT1 的属性。
在 EDITTEXT1 上单击“Enter”后,无需任何其他操作即可转到 EDITTEXT2。
【讨论】:
【参考方案2】:您应该首先创建自己的 EditText,它从 EditText 扩展而来,然后像这样覆盖 dispatchKeyEventPreIme
方法:
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event)
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK)
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0)
return super.dispatchKeyEventPreIme(event);
else if (event.getAction() == KeyEvent.ACTION_UP)
hideInputMethod();
//change your focus at here
return true;
return super.dispatchKeyEventPreIme(event);
protected void hideInputMethod()
InputMethodManager imm = (InputMethodManager)getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (null != imm)
imm.hideSoftInputFromWindow(getWindowToken(), 0);
顺便说一句,if (keyCode == 66) // CODE FOR RETURN
这样的编码方式不太好,而且66不是back的值,是回车键。
public static final int KEYCODE_ENTER = 66;
你最好改写KeyEvent.KEYCODE_BACK
或KeyEvent.KEYCODE_ENTER
。
希望对你有帮助。
【讨论】:
以上是关于使用不同的 inputType 从一个edittext请求焦点到另一个的主要内容,如果未能解决你的问题,请参考以下文章
安卓出现错误: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditT