TextInputLayout EditText nextFocusRight不能正常工作

时间:2016-01-20 14:31:26

标签: android android-edittext android-textinputlayout

我有两个TextInputLayout元素并排:名字和姓氏。在它们下面,我有另一个全宽TextInputLayout元素:电子邮件。

我试图覆盖键盘上的下一个按钮,这样当在firstname输入中单击Next时,它应该转到lastname输入并从那里转到电子邮件等。

现在的问题是,当我在键盘上按下Next时,它不会进入姓氏字段,而是转到它下面的电子邮件。

这是我的xml文件的一部分,我有三个输入:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_gravity="center_horizontal"
    android:baselineAligned="false">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_firstname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <EditText
            android:id="@+id/register_input_firstname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/hint_firstname"
            android:inputType="textCapSentences"
            android:nextFocusForward="@+id/register_input_lastname"
            android:nextFocusRight="@+id/register_input_lastname" />

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_lastname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <EditText
            android:id="@+id/register_input_lastname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/hint_lastname"
            android:inputType="textCapSentences"
            android:nextFocusDown="@+id/register_input_email" />

    </android.support.design.widget.TextInputLayout>

</LinearLayout>

<android.support.design.widget.TextInputLayout
    android:id="@+id/input_layout_email"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/register_input_email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint_email"
        android:inputType="textEmailAddress" />

</android.support.design.widget.TextInputLayout>

我也尝试定位TextInputLayout而不是EditText,但它没有效果。

下一个焦点甚至可以用TextInputLayout进行,还是一个错误,或者我只是做错了什么?

4 个答案:

答案 0 :(得分:8)

更改为此 - &gt;机器人:nextFocusDown =&#34; @ + ID / register_input_lastname&#34;

答案 1 :(得分:7)

我在下面使用了这段代码,它像魔术一样工作:)

实际上诀窍是

机器人:imeOptions =&#34; actionNext&#34;

机器人:nextFocusDown =&#34; @ + ID / tilAddress&#34;

机器人:的inputType =&#34;文本&#34;

<android.support.design.widget.TextInputLayout
        android:id="@+id/tilSchoolName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/margin_small">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="@dimen/text_size_small"
            android:textColor="@color/colorTxt"
            android:maxLines="1"
            android:imeOptions="actionNext"
            android:nextFocusDown="@+id/tilAddress"
            android:inputType="text"
            android:hint="School Name" />
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/tilAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="@dimen/text_size_small"
            android:textColor="@color/colorTxt"
            android:maxLines="1"
            android:hint="Address" />
    </android.support.design.widget.TextInputLayout>

答案 2 :(得分:4)

上面的答案是正确的,但我只需要添加一些东西,当我尝试我没有得到焦点到下一行所以我再添加一个属性,除了上述答案

  

android:inputType =“你的输入类型在这里”

放完之后我把我的编辑文本重点放到了下一个

例如

  

android:inputType =“text”//根据您的要求设置任何输入类型

     

机器人:nextFocusDown = “@ + ID / NEXT_ID”

编辑文本的完整示例

<android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout"
            android:textColorHint="@color/hint">

            <EditText                                       
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:maxLines="1"
                android:id="@id/first_name_edt"
                android:nextFocusDown="@+id/last_name_edt"
                android:imeOptions="actionNext"
                android:inputType="text"
                android:hint="@string/str_first_name" />
        </android.support.design.widget.TextInputLayout>

希望这会有助于其他人:)

答案 3 :(得分:0)

就我而言,来自 TextInputLayout 的 ID 是不够的。

为了做到这一点,我还必须为右侧字段 TextInputEditText 设置 fragment_driver_zip_edit_text id:

android:nextFocusDown="@id/fragment_driver_zip_edit_text"

这是我的用户界面:

UI example

这是使用 state 将焦点从 zip 设置为 TextInputLayout 字段的 XML:

<!-- STATE -->
<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/fragment_driver_state"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintEnd_toStartOf="@+id/fragment_driver_zip"
    app:layout_constraintHorizontal_chainStyle="spread_inside"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">
    <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textCapWords"
        android:nextFocusDown="@id/fragment_driver_zip_edit_text"
        android:selectAllOnFocus="true"
        android:textAllCaps="true" />
</com.google.android.material.textfield.TextInputLayout>
<!-- ZIP -->
<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/fragment_driver_zip"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintBaseline_toBaselineOf="@id/fragment_driver_state"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/fragment_driver_state">
    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/fragment_driver_zip_edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textCapWords"
        android:selectAllOnFocus="true"
        android:textAllCaps="true" />
</com.google.android.material.textfield.TextInputLayout>