【问题标题】:Android: Enter key move to next EditTextAndroid:输入键移动到下一个EditText
【发布时间】:2018-10-24 21:15:17
【问题描述】:

我有一个带有 6 个 EditText 的活动...该活动运行良好,但我需要单击每个 EditText 来填充它...

如何使输入键将焦点更改为另一个 EditText?

我已经尝试过的

1。我已经在每个 EditText 上设置了 OnKeyListener。

switch (v.getId()) {
    case R.id.editText1:
        activity.findViewById(R.id.editText2).requestFocus();
        return true;
    case R.id.editText2:
        activity.findViewById(R.id.editText3).requestFocus();
        return true;
    case R.id.editText3:
        activity.findViewById(R.id.editText4).requestFocus();
        return true;
            .
            .
            .
}

但是,当我点击回车键时,在焦点切换到另一个 EditText 之前,会在之前的 EditText 上创建一个新行。

2。我已将 android:singleLine="true" 添加到每个 EditText。它不适用于 inputType="number" 的 EditText

【问题讨论】:

  • 您也可以尝试添加“android:maxLines="1"” 吗?以我的经验,即使其中一个被“弃用”,两者都有区别。我认为您的选项 1 是在这种情况下要走的路。
  • 您也可以尝试在 KeyEvent 参数中使用“setOnEditorActionListener(...”) 侦听 event.getKeyCode() == KeyEvent.KEYCODE_ENTER 并在此条件为真时返回 true,这应该停止 EditText做他的默认行为
  • ~Tassadar: 设置 maxLines="1" 会创建一个新行,但不会调整 edittext 的大小。

标签: android android-edittext


【解决方案1】:

您可以在 xml 中为 EditText's 添加 imeOptions 属性:

android:imeOptions="actionNext"

但不要忘记指定inputType: 例如android:inputType="text"


有关更多详细信息,请查看此问题 - Move to another EditText when Soft Keyboard Next is clicked on Android

【讨论】:

    【解决方案2】:

    试试这个代码:

    它在 otp 屏幕中工作正常我在此活动中使用四个编辑文本,请按照以下步骤操作

    • 我正在使用这样的 TextWatcher 类

      /*Textwatcher class*/
      public class GenericTextWatcher implements TextWatcher {
      private View view;
      public GenericTextWatcher(View view) {
      this.view = view;
      }
      
       @Override
        public void afterTextChanged(Editable editable) {
      // TODO Auto-generated method stub
      String text = editable.toString();
      switch(view.getId()) {
          case R.id.edit_otp1:
              if(text.length()==1)
                  edit_otp2.requestFocus();
              break;
          case R.id.edit_otp2:
              if(text.length()==1)
                  edit_otp3.requestFocus();
              break;
          case R.id.edit_otp3:
              if(text.length()==1)
                  edit_otp4.requestFocus();
              break;
          case R.id.edit_otp4:
              break;
         }
        }
      
      @Override
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
      // TODO Auto-generated method stub
      }
      
      @Override
       public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
      // TODO Auto-generated method stub
      }
       }
      

    像这样在edittext otp活动中使用textwatcher

    /*call textwatcher class*/
        edit_otp1.addTextChangedListener(new GenericTextWatcher(edit_otp1));
        edit_otp2.addTextChangedListener(new GenericTextWatcher(edit_otp2));
        edit_otp3.addTextChangedListener(new GenericTextWatcher(edit_otp3));
        edit_otp4.addTextChangedListener(new GenericTextWatcher(edit_otp4));
    

    它对我有用,请尝试。

    【讨论】:

      猜你喜欢
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2011-06-27
      • 1970-01-01
      • 2020-09-12
      • 2019-08-24
      • 2012-01-09
      相关资源
      最近更新 更多