【问题标题】:KeyCode_Enter to next edittextKeyCode_Enter 到下一个编辑文本
【发布时间】:2021-06-14 18:31:04
【问题描述】:

在edittext中,输入“Enter”键后,系统会在其中创建一个新行。我想专注于下一个edittext,没有新行。如何编码?我在 xml 中的代码如下

    <EditText
    android:id="@+id/txtNPCode"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:layout_alignLeft="@+id/lblNPCode"
    android:layout_below="@+id/lblNPCode"
    android:layout_centerHorizontal="true"/>
<EditText
    android:id="@+id/txtCNPCode"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:layout_alignLeft="@+id/lblCNPCode"
    android:layout_below="@+id/lblCNPCode"
    android:layout_centerHorizontal="true"/>  

我还在 setOnKeyListener 中设置了键码

   tCNPCode.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if(keyCode == 66) {
                Toast.makeText(S_PCode.this, "Enter Key", Toast.LENGTH_LONG).show();
                //tNPCode.setFocusable(true);
            }
            return false;
        }
    });

【问题讨论】:

    标签: android android-edittext setfocus


    【解决方案1】:

    您甚至不必使用OnKeyListener。只需将行 android:singleLine="true" 添加到您的 EditText。在此操作之后,EditText 的行为完全符合您的要求。因此,在您的特定情况下:

    <EditText
        android:id="@+id/txtNPCode"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_alignLeft="@+id/lblNPCode"
        android:layout_below="@+id/lblNPCode"
        android:layout_centerHorizontal="true"
        android:singleLine="true"
    />
    <EditText
        android:id="@+id/txtCNPCode"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_alignLeft="@+id/lblCNPCode"
        android:layout_below="@+id/lblCNPCode"
        android:layout_centerHorizontal="true"
    />
    

    解决问题。

    【讨论】:

    • 感谢您的精彩而简单的解释
    • 这个 id 很好,但是 android:singleLine="true" 已被弃用。
    【解决方案2】:

    您必须使用requestFocus 方法。在您的情况下,它将类似于:

    tCNPCode.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if(keyCode == KeyEvent.KEYCODE_ENTER) {
                txtCNPCode.requestFocus();
            }
            return false;
        }
    });
    

    【讨论】:

    • 谢谢。我使用请求焦点。有效。需要加return true;?
    • 我建议也使用 ACTION_UP 对其进行过滤,因为您将点击两次 onKey 方法,如果您将 setOnKeyListener 实现到 ArrayList 内的 EditTexts 列表,您将冒险前进两步。 if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP)
    • 我不会使用实际的 int 文字,因为它根本不可读。
    【解决方案3】:

    最好的方法是使用 inputType 的选项之一,例如:android:inputType="textPersonName" 这将达到想要的效果。也请查看其他选项,它将为您节省一些时间:)

    您不应该使用 android:singleLine="true",因为它已被弃用。以下是相关文档的说明:

    此属性已弃用,由 textMultiLine 替换 inputType 属性中的标志。更改现有的时要小心 布局,因为 singLine 的默认值为 false(多行 mode),但如果您为 inputType 指定任何值,则默认值为 单线模式。 (如果 singleLine 和 inputType 属性都是 找到,inputType 标志将覆盖 singleLine 的值。)。

    【讨论】:

      【解决方案4】:

      考虑 IME 选项,这里有很好的描述 http://androidcookbook.com/Recipe.seam;jsessionid=C824437B48F346E23FBE5828969029B4?recipeId=422 和文档这里 http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions

      您唯一需要的是在每个 EditText 上添加属性 android:imeOptions="actionNext"。键盘出现一个 Next 键,其中 Enter 曾经是,并允许导航到下一个 EditText。

      但是“actionNext”的顺序是从上到下。例如,如果您有水平布局:

      <LinearLayout android:orientation="horizontal" >
              <EditText android:id="@+id/et1" android:imeOptions="actionNext" />
              <EditText android:id="@+id/et2" android:imeOptions="actionNext" />
      </LinearLayout>
      

      et2 永远不会获得焦点。您应该在代码中修复它:

      et1.setOnEditorActionListener(new OnEditorActionListener()
      {
          @Override
          public boolean onEditorAction(TextView v, int actionId,
                  KeyEvent event)
          {
              switch (actionId)
              {
              case EditorInfo.IME_ACTION_NEXT:
                  boolean result = false;
                  TextView v1 = (TextView) v.focusSearch(View.FOCUS_RIGHT);
                  if (v1 != null)
                      result = v1.requestFocus(View.FOCUS_RIGHT);
                  else if (!result)
                  {
                      v1 = (TextView) v.focusSearch(View.FOCUS_DOWN);
                      if (v1 != null)
                          result = v1.requestFocus(View.FOCUS_DOWN);
                  }
                  if (!result)
                      v.onEditorAction(actionId);
                  break;
      
              default:
                  v.onEditorAction(actionId);
                  break;
              }
              return true;
          }
      });
      

      原文链接:https://groups.google.com/forum/?fromgroups=#!topic/android-developers/OykOG6XtE8w

      【讨论】:

        【解决方案5】:

        使用单行代码 (Java)

        tCNPCode.setSingleLine(true);
        

        科特林

        tCNPCode.isSingleLine = true
        

        它会在按下 Enter 时导航到下一个项目

        【讨论】:

          【解决方案6】:

          只需将最大行数设置为 xml 布局文件中的EditText 框: android:maxLength="1"

          【讨论】:

            猜你喜欢
            • 2015-10-07
            • 2012-10-25
            • 1970-01-01
            • 1970-01-01
            • 2017-01-06
            • 1970-01-01
            • 2016-12-05
            • 1970-01-01
            • 2010-12-20
            相关资源
            最近更新 更多