【问题标题】:TextInputLayout EditText nextFocusRight not working as shouldTextInputLayout EditText nextFocusRight 不能正常工作
【发布时间】:2016-04-26 11:05:18
【问题描述】:

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

我正在尝试覆盖键盘上的下一步按钮,以便在单击名字输入中的下一步时,它应该转到姓氏输入,然后从那里转到电子邮件等。

现在的问题是,当我在键盘上按 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 的下一个焦点是否可能,或者它是一个错误还是我只是做错了什么?

【问题讨论】:

标签: android android-edittext android-textinputlayout


【解决方案1】:

改成这个 --> android:nextFocusDown="@+id/register_input_lastname"

【讨论】:

  • 哈哈,确实有效。我猜这是因为焦点自然向下移动,从技术上讲,姓氏输入低于名字。但我不明白为什么会有 nextFocusRight 等?这些仅适用于常规 EditText 输入吗?
  • 不知道但值得一试。
  • 我没有放加号,导致它找不到 id。添加加号是个好主意,谢谢。
  • 您应该删除id 之前的+。所以让它"@id/。仅在定义新 ID 时使用 +
【解决方案2】:

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

其实诀窍是

android:imeOptions="actionNext"

android:nextFocusDown="@+id/tilAddress"

android:inputType="text"

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

【讨论】:

    【解决方案3】:

    上面的答案是正确的,但是当我尝试时我只需要添加一些东西我没有将焦点放在下一行,所以我除了上面的答案之外还添加了一个属性

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

    完成后,我将编辑文本焦点转移到下一个

    例子

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

    android: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>
    

    希望这对其他人有帮助:)

    【讨论】:

      【解决方案4】:

      就我而言,TextInputLayout 的 id 还不够。

      我还必须为右侧字段 fragment_driver_zip_edit_text 设置 TextInputEditText id 才能执行此操作:

      android:nextFocusDown="@id/fragment_driver_zip_edit_text"

      这是我的用户界面:

      这是使用TextInputLayout 将焦点从state 设置为zip 字段的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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 2010-11-30
        • 2021-10-02
        • 2017-08-06
        相关资源
        最近更新 更多