Подтвердить что ты не робот

Неправильная ориентация объекта EditText в макетах

У меня есть два разных файла main.xml, один для портрета, один для макета. Каждый из них имеет этот код внутри RelativeLayout внутри прокрутки.

<LinearLayout
    android:id="@+id/name_phone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/acquire"
    >
    <EditText
        android:id="@+id/name"
        android:inputType="textPersonName"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="observer name"
        android:nextFocusDown="@id/phone"
        android:background="@android:drawable/editbox_background"               
        />
    <EditText
        android:id="@+id/phone"
        android:inputType="phone"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="phone number"
        android:nextFocusDown="@id/phone"
        android:background="@android:drawable/editbox_background"
        />
    </LinearLayout>

и т.д.

Честность заключается в следующем: насколько я знаю, вы не должны иметь возможность ссылаться на вещи, которые еще не произошли в xml, поэтому андроид: nextFocusDown = "@id/phone" должен выйти из строя, потому что телефон hasnt объявлено; и это то, что происходит в моем пейзаже xml, но не в портрете. В портрете он отлично работает и передает фокус через все четыре EditTexts без задержек. Если я помещу NextFocusDown в ландшафт, он не сможет скомпилировать, указав "Нет найденного ресурса, который соответствует указанному имени (в" nextFocusDown "со значением" @id/phone ").

Решение или объяснение было бы замечательным. Идея состоит в том, что у меня есть четыре текстовых поля в двух разных LinearLayouts, и в зависимости от того, какой из них имеет фокус, сначала передают его в EditText под ним, пропуская остальные. Я хочу, чтобы он работал так, как у меня есть в портретном макете, когда пользователь нажимает рядом с именем, фокус перемещается на телефон, когда они нажимают дальше, когда он переходит к электронной почте и т.д. Мне также интересно узнать, почему позволяя работать в портретном, но не пейзажном режиме.

4b9b3361

Ответ 1

Это действительно старое сообщение, но я отвечаю на него как можно лучше. Из того, что я знаю, вы положили знак "+" в первый раз, когда ссылаетесь на идентификатор, так что на вашем: android:nextFocusDown="@id/phone" должен быть android:nextFocusDown="@+id/phone, потому что это первый раз, когда вы ссылаетесь на этот объект. Затем выньте знак +, где у вас есть android:id="@+id/phone"

Надеюсь, это поможет любому, кто сталкивается с этим.

Ответ 2

Вы используете "@id/phone", попробуйте использовать "@+ id/phone", чтобы указать ссылку на объект объекта