У меня есть два разных файла 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 под ним, пропуская остальные. Я хочу, чтобы он работал так, как у меня есть в портретном макете, когда пользователь нажимает рядом с именем, фокус перемещается на телефон, когда они нажимают дальше, когда он переходит к электронной почте и т.д. Мне также интересно узнать, почему позволяя работать в портретном, но не пейзажном режиме.