在Android上单击"软键盘下一步"时,移动到另一个EditText

and*_*mer 193 android android-edittext

当我按下"下一步"时,必须将用户EditText上的焦点移至密码.然后,从密码,它必须向右移动,依此类推.你能帮我解释一下如何编码吗?

在此输入图像描述

<LinearLayout
    android:id="@+id/LinearLayout01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="User Name*" />

    <EditText
        android:id="@+id/txt_User"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:singleLine="true" />

</LinearLayout>


<LinearLayout
    android:id="@+id/LinearLayout02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password*" />

    <EditText
        android:id="@+id/txt_Password"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:singleLine="true"
        android:password="true" />

    <TextView
        android:id="@+id/confirm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password*" />

    <EditText
        android:id="@+id/txt_Confirm"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:singleLine="true"
        android:password="true" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

Tob*_*run 439

焦点处理

焦点移动基于在给定方向上找到最近邻居的算法.在极少数情况下,默认算法可能与开发人员的预期行为不匹配.

使用以下XML属性更改方向导航的默认行为:

android:nextFocusDown="@+id/.."  
android:nextFocusLeft="@+id/.."    
android:nextFocusRight="@+id/.."    
android:nextFocusUp="@+id/.."  
Run Code Online (Sandbox Code Playgroud)

除了方向导航,您还可以使用标签导航.为此您需要使用

android:nextFocusForward="@+id/.."
Run Code Online (Sandbox Code Playgroud)

要获得关注的特定视图,请致电

view.requestFocus()
Run Code Online (Sandbox Code Playgroud)

要收听某些不断变化的焦点事件,请使用a View.OnFocusChangeListener


键盘按钮

您可以android:imeOptions用来处理键盘上的额外按钮.

您可以在与编辑器关联的IME中启用的其他功能,以改善与应用程序的集成.这里的常量对应于imeOptions定义的常量.

imeOptions的常量包括各种动作和标志,请参阅上面的链接了解它们的值.

价值榜样

ActionNext:

操作键执行"下一步"操作,将用户带到将接受文本的下一个字段.

ActionDone:

动作键执行"完成"操作,通常意味着无需输入任何内容,IME将被关闭.

代码示例:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="32dp"
        android:layout_marginTop="16dp"
        android:imeOptions="actionNext"
        android:maxLines="1"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/editText1"
        android:layout_marginTop="24dp"
        android:imeOptions="actionDone"
        android:maxLines="1"
        android:ems="10" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

如果你想听imeoptions事件使用a TextView.OnEditorActionListener.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            performSearch();
            return true;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我把`android:imeOptions ="actionNext"`放到我的所有EditTexts中,问题就消失了.非常感谢. (21认同)
  • 在我的情况下``android:nextFocusForward ="@ + id/.."`做了伎俩. (19认同)
  • 对于我的应用程序,只使用android:imeOptions ="actionNext"不起作用.EditText在收听imeOptions标志之前需要android:inputType ="[something]". (8认同)
  • 按NEXT时,它如何知道要关注哪一个?它检查"正确"然后"向下"吗?如果用户按下NEXT键,是否有一个函数可以让下一个视图的id被聚焦? (3认同)
  • 对于每个EditText,我必须同时使用joaquin和Mr.Moustard。 (2认同)

Mat*_*s H 63

android:inputType="text"
Run Code Online (Sandbox Code Playgroud)

应该带来同样的效果.在紧接着之后将焦点带到下一个元素.

android:nextFocusDown="@+id/.."
Run Code Online (Sandbox Code Playgroud)

如果您不希望下一个视图获得焦点,请另外使用此功能


Abr*_*yev 28

添加您的editText

android:imeOptions="actionNext"
android:singleLine="true"
Run Code Online (Sandbox Code Playgroud)

将属性添加到清单中的活动

    android:windowSoftInputMode="adjustResize|stateHidden"
Run Code Online (Sandbox Code Playgroud)

在布局文件中ScrollView设置为root或parent layout all ui

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.ukuya.marketplace.activity.SignInActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

       <!--your items-->

    </ScrollView>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

如果你不想每次都添加,请创建样式:在values/style.xml中添加样式

默认/风格:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="editTextStyle">@style/AppTheme.CustomEditText</item>
    </style>

<style name="AppTheme.CustomEditText"     parent="android:style/Widget.EditText">
        //...
        <item name="android:imeOptions">actionNext</item>
        <item name="android:singleLine">true</item>
    </style>
Run Code Online (Sandbox Code Playgroud)


Spr*_*ker 18

使用以下行

android:nextFocusDown="@+id/parentedit"
Run Code Online (Sandbox Code Playgroud)

parentedit是下一个EditText要关注的ID .

以上行还需要以下行.

android:inputType="text"
Run Code Online (Sandbox Code Playgroud)

要么

android:inputType="number"
Run Code Online (Sandbox Code Playgroud)

感谢@Alexei Khlebnikov的建议.

  • 我已经尝试过但它没有用 (4认同)
  • 它对我有用.与`android:inputType ="text"`或`android:inputType ="number"`一起使用. (3认同)

小智 12

android:inputType="textNoSuggestions"
android:imeOptions="actionNext"
android:singleLine="true"
android:nextFocusForward="@+id/.."
Run Code Online (Sandbox Code Playgroud)

添加额外字段

安卓的inputType = "textNoSuggestions"

在我的情况下工作!


Hit*_*wah 9

<AutoCompleteTextView
                android:id="@+id/email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/user"
                android:hint="@string/username"
                android:inputType="text"
                android:maxLines="1"
                android:imeOptions="actionNext"
                android:singleLine="true" />
Run Code Online (Sandbox Code Playgroud)

这三条线做得很神奇

            android:maxLines="1"
            android:imeOptions="actionNext"
            android:singleLine="true"
Run Code Online (Sandbox Code Playgroud)


Ena*_*que 8

在 Kotlin 中,我使用了 Bellow 之类的..

  1. xml:

    <EditText
      android:id="@+id/et_amount"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:imeOptions="actionNext"
      android:inputType="number"
      android:singleLine="true" />
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在科特林中:

    et_amount.setOnEditorActionListener { v, actionId, event ->
    
        if (actionId == EditorInfo.IME_ACTION_NEXT) {
            // do some code
            true
        } else {
            false
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)


小智 6

在onEditorAction处理程序中,请记住必须返回一个布尔值,指示您是否正在处理该操作(true),或者是否应用了某些逻辑并希望正常行为(false),如下例所示:

EditText te = ...
te.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
        if (actionId == EditorInfo.IME_ACTION_NEXT) {
            // Some logic here.
            return true; // Focus will do whatever you put in the logic.
        }
        return false;  // Focus will change according to the actionId
    }
});
Run Code Online (Sandbox Code Playgroud)

我在执行逻辑后返回true时发现了这一点,因为焦点没有移动.


小智 6

尝试对视图中的每个 editText使用android:imeOptions="actionNext"标签,当您单击软键盘的“下一步”时,它将自动聚焦到下一个编辑文本。


小智 5

只需使用以下代码即可正常工作,并为每个编辑文本使用 inputType ,并且下一个按钮将出现在键盘中。

android:inputType="text" or android:inputType="number" etc
Run Code Online (Sandbox Code Playgroud)


小智 5

简单的方法,当您只有几个字段时:

需要设置

android:maxLines="1"

android:imeOptions="actionNext"

android:inputType="" <-设置您的文本类型,在其他情况下它将是多行并阻止下一步

样本:

<EditText android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:textSize="@dimen/text_large"
              android:maxLines="1"
              android:inputType="textEmailAddress"
              android:imeOptions="actionNext"
              android:layout_marginLeft="@dimen/element_margin_large"
              android:layout_marginRight="@dimen/element_margin_large"
              android:layout_marginTop="0dp"/>
Run Code Online (Sandbox Code Playgroud)