移动到另一个EditText时,软键盘下一步点击Android

当我按下“下一步”,用户编辑文本的焦点必须移动到密码。然后,从Password,它必须向右移动,依此类推。你能告诉我怎么编码吗?

enter image description here

<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>
260157 次浏览

使用下面的行

android:nextFocusDown="@+id/parentedit"

parentedit是下一个要聚焦的EditText的ID。

上面的行还需要下面的行。

android:inputType="text"

android:inputType="number"

谢谢你的建议@Alexei Khlebnikov。

集中处理

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

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

android:nextFocusDown="@+id/.."
android:nextFocusLeft="@+id/.."
android:nextFocusRight="@+id/.."
android:nextFocusUp="@+id/.."

除了定向导航,你还可以使用标签导航。为此你需要使用

android:nextFocusForward="@+id/.."

要获得一个特定的视图来聚焦,请调用

view.requestFocus()

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


键盘按钮

你可以使用android:imeOptions来处理键盘上的额外按钮。

可以在与编辑器关联的IME中启用的其他功能 以改进与应用程序的集成。这里的常数 对应于imeOptions中定义的那些。< / p >

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>

如果你想监听imeoptions事件,使用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;
}
});

android:inputType="text"

应该会带来同样的效果。点击next后将焦点转移到下一个元素。

android:nextFocusDown="@+id/.."

如果你不想让下一个视图获得焦点,在除了中使用这个

<?xml version="1.0" encoding="utf-8"?>


<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="vertical" >


<RelativeLayout
android:layout_width="match_parent"
android:layout_height="666dp"
android:background="#1500FFe5"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editGrWt"
android:layout_marginTop="14dp"
android:layout_toLeftOf="@+id/textView3"
android:ems="6"
android:text="    Diamond :"
android:textColor="@color/background_material_dark"
android:textSize="15sp" />
<EditText
android:id="@+id/editDWt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/TextView02"
android:layout_alignLeft="@+id/editGrWt"
android:background="@color/bright_foreground_inverse_material_light"
android:ems="4"
android:hint="Weight"
android:inputType="numberDecimal"
android:nextFocusLeft="@+id/editDRate"
android:selectAllOnFocus="true"
android:imeOptions="actionNext"


/>
<requestFocus />




<TextView
android:id="@+id/TextView03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/TextView02"
android:layout_below="@+id/TextView02"
android:layout_marginTop="14dp"
android:ems="6"
android:text="    Diamond :"
android:textColor="@color/background_material_dark"
android:textSize="15sp" />


<EditText
android:id="@+id/editDWt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/TextView03"
android:layout_alignBottom="@+id/TextView03"
android:layout_alignLeft="@+id/editDWt"
android:background="@color/bright_foreground_inverse_material_light"
android:ems="4"
android:hint="Weight"
android:inputType="numberDecimal"
android:text="0"
android:selectAllOnFocus="true"
android:imeOptions="actionNext"/>
<requestFocus />


<TextView
android:id="@+id/TextView04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editDWt1"
android:layout_marginTop="14dp"
android:layout_toLeftOf="@+id/textView3"
android:ems="6"
android:text="         Stone :"
android:textColor="@color/background_material_dark"
android:textSize="15sp" />


<EditText
android:id="@+id/editStWt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/TextView04"
android:layout_alignBottom="@+id/TextView04"
android:layout_alignLeft="@+id/editDWt1"
android:background="@color/bright_foreground_inverse_material_light"
android:ems="4"
android:hint="Weight"
android:inputType="numberDecimal"
android:nextFocusForward="@+id/editStRate1"
android:imeOptions="actionNext" />
<requestFocus />
<TextView
android:id="@+id/TextView05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/TextView04"
android:layout_below="@+id/editStRate1"
android:layout_marginTop="14dp"
android:ems="6"
android:text="         Stone :"
android:textColor="@color/background_material_dark"
android:textSize="15sp" />




</RelativeLayout>


</ScrollView>

在你的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
}
});

我发现这当我返回真执行我的逻辑,因为焦点没有移动。

添加你的editText

android:imeOptions="actionNext"
android:singleLine="true"

在manifest中为活动添加属性

    android:windowSoftInputMode="adjustResize|stateHidden"

在布局文件ScrollView设置为根或父布局所有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>

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

.xml中添加style

默认的/风格:

<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>
android:inputType="textNoSuggestions"
android:imeOptions="actionNext"
android:singleLine="true"
android:nextFocusForward="@+id/.."

添加额外字段

android: inputType = " textNoSuggestions "

对我来说很管用!

如果你想在imeOptions中使用多行EditText,请尝试:

android:inputType="textImeMultiLine"

只需使用下面的代码,它将工作良好,并使用inputType为每个编辑文本和下一个按钮将出现在键盘上。

android:inputType="text" or android:inputType="number" etc
Inside Edittext just arrange like this




<EditText
android:id="@+id/editStWt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:imeOptions="actionNext" //now its going to rightside/next field automatically
..........
.......


</EditText>

将inputType添加到edittext,然后进入它将进入下一个edittext

android:inputType="text"
android:inputType="textEmailAddress"
android:inputType="textPassword"

还有更多。

inputType=textMultiLine不进入下一个编辑文本

<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" />

这三行就很神奇

            android:maxLines="1"
android:imeOptions="actionNext"
android:singleLine="true"

在某些情况下,你可能需要手动移动焦点到下一个字段:

focusSearch(FOCUS_DOWN).requestFocus();

例如,如果您有一个文本字段,在单击时打开一个日期选择器,并且您希望在用户选择了日期并且选择器关闭后,焦点自动移动到下一个输入字段,那么您可能需要这个选项。在XML中没有办法处理这个,它必须通过编程来完成。

简单的方法,当你一个接一个只有几个字段时:

需要设置

android:maxLines="1"

android:imeOptions="actionNext"

< p > 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"/>

尝试为视图中的每个editText使用android: imeOptions = " actionNext "标签,当你单击softKeyboard的next时,它将自动聚焦到下一个editText。

如果你在滚动视图中有元素,那么你也可以解决这个问题:

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ed_password"
android:inputType="textPassword"
android:focusable="true"
android:imeOptions="actionNext"
android:nextFocusDown="@id/ed_confirmPassword" />

在你的活动中:

edPassword.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_NEXT) {
focusOnView(scroll,edConfirmPassword);
return true;
}
return false;
}
});


public void focusOnView(ScrollView scrollView, EditText viewToScrollTo){
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.smoothScrollTo(0, viewToScrollTo.getBottom());
viewToScrollTo.requestFocus();
}
});
}

简单方法:

  • 自动移动光标到下一个编辑文本
  • 如果edittext是最后一个输入->隐藏键盘

将此添加到.xml文件的edittext字段

android:inputType="textCapWords"

在Kotlin我已经使用了Bellow像..

  1. < p > 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" />
    
  2. in kotlin:

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