软键盘下一个在Android上单击时移到另一个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> 

焦点处理

焦点运动基于在给定方向上find最近邻的algorithm。 在极less数情况下,默认algorithm可能与开发人员的预期行为不匹配。

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

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

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

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

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

 view.requestFocus() 

要听取某些更改的焦点事件,请使用View.OnFocusChangeListener


键盘button

您可以使用android:imeOptions来处理键盘上的额外button。

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

imeOptions的常量包括各种操作和标志,请参阅上面的链接以获取它们的值。

价值的例子

行动下一个 :

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

ActionDone :

操作键执行“完成”操作,通常意味着没有什么更多的input和IME将被closures。

代码示例:

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

应该带来同样的效果。 在下一步之后,将重点放在下一个元素上。

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

另外如果你不想让下一个视图获得焦点,也可以使用它

使用下面的行

  android:nextFocusDown="@+id/parentedit" 

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

添加你的editText

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

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

  android:windowSoftInputMode="adjustResize|stateHidden" 

在布局文件ScrollView设置为根或父布局所有用户界面

 <?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中创build样式:添加样式

默认/风格:

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

添加额外的字段

安卓的inputType = “textNoSuggestions”

在我的情况下工作!

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

当我执行我的逻辑后,我回到了真正的地方,因为焦点没有移动。

 <?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> 

如果您想用imeOptions使用多行EditText ,请尝试:

 android:inputType="textImeMultiLine" 

只是使用下面的代码,它将正常工作,并使用每个编辑文本的inputType和下一个button将出现在键盘上。

 android:inputType="text" or android:inputType="number" etc