Определенный макет xml в макете-земле не отображается в приложении Android

Я разрабатываю приложение в соответствии с этим примером . Я определил ландшафтный макет для header.xml в папке макета-земли, но когда я изменяю ориентацию на пейзаж, определенный макет не отображается на экране.

Знаете почему?

благодаря

Обновлено:

Код активности:

public class ACENewsFeedActivity extends ListActivity { // Progress Dialog private ProgressDialog pDialog; // Array list for list view ArrayList<HashMap<String, String>> rssItemList = new ArrayList<HashMap<String,String>>(); RSSParser rssParser = new RSSParser(); List<RSSItem> rssItems = new ArrayList<RSSItem>(); RssFeed rssFeed; private static String TAG_TITLE = "title"; private static String TAG_LINK = "link"; private static String TAG_DESRIPTION = "description"; private static String TAG_PUB_DATE = "pubDate"; //private static String TAG_GUID = "guid"; // not used /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.rss_item_list); /** * Calling a backgroung thread will loads recent articles of a website * @param rss url of website * */ new loadRSSFeedItems().execute(); } .... } 

XMl Layout в ландшафтном режиме:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layoutHeader" android:layout_width="fill_parent" android:layout_height="50dip" android:layout_alignParentTop="true" android:background="@layout/header_gradient" android:orientation="horizontal"> <!-- Logo --> <!-- Refresh --> <!-- Plus Button --> <ImageButton android:id="@+id/btnAddSite" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="5dip" android:background="@null" android:src="@drawable/plus" android:layout_centerVertical="true" /> <ImageView android:id="@+id/logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:src="@drawable/logo" /> <ImageView android:id="@+id/refreshList" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:src="@drawable/refresh" /> </RelativeLayout> 

Solutions Collecting From Web of "Определенный макет xml в макете-земле не отображается в приложении Android"

Android позволяет предоставлять различные версии файлов ресурсов для поддержки определенных конфигураций устройств, включая размер экрана / разрешение и (как вы пытаетесь) ориентацию устройства. Когда андроид загружает файл макета, он будет выглядеть сначала в папке res/layout-port (если он находится в портретной ориентации) или в папке res/layout-land (если она находится в альбомной ориентации). Если он не найдет файл, он будет выглядеть в обычной папке res/layout .

Кроме того, как отмечено здесь , когда некоторые конфигурации устройств изменяются (например, ориентация устройства) во время выполнения, андроид перезапускает любой процесс в настоящий момент, сохраняя состояние, уничтожая его, а затем запуская его с сохраненной информацией о состоянии. Это позволяет загружать файлы макета снова, и он будет искать его в папке для новой ориентации при попытке загрузить их.

Итак, если вы начнете свое приложение в портрете, он загрузит файл в res/layout-port или res/layout . Если вы затем повернете устройство к ландшафту, он уничтожит ваш процесс и перезапустит его. Однако на этот раз он будет в ландшафте, поэтому он проверит res/layout-land вместо файлов макета.

Если у вас есть ваши файлы, настроенные таким образом, но они не работают по вашему мнению, я должен сначала убедиться, что он определенно не использует правильные файлы, поместив два разных файла header.xml в layout-land и layout-land layout-port папок, возможно, один с красным фоном и один с зеленым фоном. Обязательно проверьте ссылки на файлы и, возможно, используйте Toast, чтобы опубликовать некоторую информацию об отладке на экране, чтобы убедиться, что она правильно накачивает макеты.

Поведение по умолчанию – это андроид для обработки изменения ориентации (что включает в себя уничтожение вашей активности и создание нового экземпляра, который будет перезагружать все файлы макета). Это поведение по умолчанию будет всегда происходить, если ваш тег активности в вашем файле манифеста не содержит свойство android: configChanges = "orientation". (Этот тег может принимать аргументы, отличные от ориентации – андроид будет обрабатывать изменения конфигурации для всех событий, кроме тех, которые вы передаете в качестве аргументов для этого тега.)

Если вы включаете тег android:configChanges="orientation" вы указываете андроиду НЕ уничтожать свою активность и НЕ перезагружать файлы макета при изменении ориентации устройства. Вместо его поведения по умолчанию он вызывается методом (который вы определяете), чтобы позволить вам вносить какие-либо изменения, которые вы хотите обработать для изменения ориентации, вместо того, чтобы позволить андроиду обрабатывать его автоматически. Он предназначен для того, чтобы, если разрушить вашу деятельность было бы большим неудобством, ее не нужно автоматически уничтожать.

EDIT: добавил некоторые вещи из обсуждения комментариев

Вы должны определить android:configChanges="orientation" в файле manifest для этого действия и переопределить метод onConfigChanged() в этом setContentView()

Вот так:

 @Override public void onConfigurationChanged(Configuration newConfig) { setContentView(R.layout.your_xml); super.onConfigurationChanged(newConfig); }