簡體   English   中英

當在 Android 上單擊軟鍵盤下一步時移動到另一個 EditText

[英]Move to another EditText when Soft Keyboard Next is clicked on 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>

焦點處理

焦點移動基於一種算法,該算法在給定方向上找到最近的鄰居。 在極少數情況下,默認算法可能與開發人員的預期行為不匹配。

使用以下 XML 屬性更改定向導航的默認行為:

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

除了定向導航,您還可以使用標簽導航。 為此,您需要使用

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

要獲得特定視圖的焦點,請致電

view.requestFocus()

要收聽某些更改焦點事件,請使用View.OnFocusChangeListener


鍵盤按鈕

您可以使用android:imeOptions來處理鍵盤上的額外按鈕。

您可以在與編輯器關聯的 IME 中啟用的其他功能,以改進與您的應用程序的集成。 此處的常量對應於 imeOptions 定義的常量。

imeOptions 的常量包括各種動作和標志,有關它們的值,請參閱上面的鏈接。

價值示例

行動下一個

操作鍵執行“下一步”操作,將用戶帶到將接受文本的下一個字段。

操作完成

操作鍵執行“完成”操作,通常意味着沒有更多內容需要輸入並且 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/.."

如果您不希望下一個視圖獲得焦點,請另外使用它

添加您的編輯文本

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

向清單中的活動添加屬性

    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 中添加樣式

默認/樣式:

<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:nextFocusDown="@+id/parentedit"

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

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

android:inputType="text"

要么

android:inputType="number"

感謝@Alexei Khlebnikov 的建議。

android:inputType="textNoSuggestions"
android:imeOptions="actionNext"
android:singleLine="true"
android:nextFocusForward="@+id/.."

添加額外字段

android: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
    }
});

由於焦點沒有移動,因此在執行邏輯后返回 true 時我發現了這一點。

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

簡單的方法,當您只有幾個字段時:

需要設置

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

只需使用以下代碼即可正常工作,並為每個編輯文本使用 inputType,下一個按鈕將出現在鍵盤中。

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

在某些情況下,您可能需要手動將焦點移動到下一個字段:

focusSearch(FOCUS_DOWN).requestFocus();

例如,如果您有一個在單擊時打開日期選擇器的文本字段,並且您希望在用戶選擇日期並且選擇器關閉后焦點自動移至下一個輸入字段,則您可能需要此功能。 沒有辦法在 XML 中處理這個問題,它必須以編程方式完成。

嘗試對視圖中的每個 editText 使用android:imeOptions="actionNext"標記,當您單擊 softKeyboard 的 Next 時,它將自動聚焦到下一個 edittext。

在 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" />
  2. 在科特林:

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

將 inputType 添加到 edittext 並在輸入時進入下一個 edittext

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

還有很多。

inputType=textMultiLine 不會在回車時轉到下一個編輯文本

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

如果您想將多行EditTextimeOptions一起使用,請嘗試:

android:inputType="textImeMultiLine"

簡單的方法:

  • 自動將光標移動到下一個編輯文本
  • 如果 edittext 是最后一次輸入 -> 隱藏鍵盤

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

android:inputType="textCapWords"
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>

如果您在滾動視圖中有元素,那么您還可以將這個問題解決為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM