android - 包含布局中的 NextFocus editText

标签 android android-layout android-edittext focus android-databinding

我创建了一个简单的布局,其中包含我的标签和我的 editText。多次包含此布局以创建表单。

但是使用这种方法,“nextFocus”功能无法正常工作,我找不到解决方案。我需要给出下一个 editText 的 id,但因为它在包含布局中,所以 id 与当前的 editText 相同。

他们是通过仅使用 xml 解决方案来实现这一目标的方法吗?我特别想到数据绑定(bind)。

这是我的布局:

包含布局:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<data>

    <variable
        name="viewModel"
        type="viewModels.StringDataTypeViewModel"/>

    <variable
        name="nextFocus"
        type="Integer"/>

</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    android:padding="10dp"

    android:orientation="horizontal"
    android:gravity="center_vertical">

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"

        tools:text="Nom de famille : "
        android:text="@{viewModel.label}"

        android:singleLine="true"
        android:ellipsize="end"/>

    <EditText android:id="@+id/value"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"

        android:textSize="@dimen/patient_detail_edittext_text_size"

        android:inputType="textPersonName"

        android:ellipsize="end"
        tools:text="Dupont"
        android:text="@={viewModel.value}"
        android:textColor="@android:color/widget_edittext_dark"

        android:clickable="@{viewModel.editable}"
        android:cursorVisible="@{viewModel.editable}"
        android:focusable="@{viewModel.editable}"
        android:focusableInTouchMode="@{viewModel.editable}"

        android:background="@{viewModel.editable ?  @android:drawable/edit_text : @drawable/empty_drawable}"

        android:nextFocusForward="@id/value"/>

</LinearLayout>

表单布局:
<LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:orientation="vertical"
                android:visibility="@{viewModel.editable ? View.VISIBLE: View.GONE}">

                <include layout="@layout/string_data_type_layout"
                    app:viewModel="@{viewModel.familyNameViewModel}" />

                <include layout="@layout/string_data_type_layout"
                    app:viewModel="@{viewModel.givenNameViewModel}" />

                <include layout="@layout/string_data_type_layout"
                    app:viewModel="@{viewModel.patientCodeViewModel}" />

                <include layout="@layout/string_data_type_layout"
                    app:viewModel="@{viewModel.addressViewModel}" />


            </LinearLayout>

最佳答案

第一步 : 为 提供唯一 ID全部 您的 包括元素

<include android:id="@+id/edit_text_1"
            ... />
<include android:id="@+id/edit_text_2"
            ... />

第二步 : 将这些属性添加到 您的包括布局xml(在您的情况下为LinearLayout)
<LinearLayout
        android:descendantFocusability="afterDescendants"
        android:focusableInTouchMode="true"
        ... />

第三步 :在所有包含元素中使用步骤 1 中定义的 id(根据需要的导航)
<include android:id="@+id/edit_text_1"
         app:nextFocus="@{@id/edit_text_2}"
         ... />

干杯!

关于android - 包含布局中的 NextFocus editText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37385666/

相关文章:

android - 按钮在横向旋转中被切断(Android XML)

java - 单击时更新 EditText 和数据库

android - eclipse +安卓+Cocos2d-x : Why does the emulation only work once?

java - 无法从具有 ListView 的 fragment 导航到另一个 fragment

css - 如何计算移动设备的宽度和高度

java - 使用 BackgroundColorSpan 时光标不可见

android - 如何知道EditText的高度?

java - SAX - 没有值的 HTML 属性

android - 来自 JS 的错误调用 : field sizes are different [[8, 39],[4,0]

android - 如果我在键盘弹出时设置 linearlayout 权重,它会调整其大陆的大小