布局栏中定义的xml布局未出现在android应用程序中

布局栏中定义的xml布局未出现在android应用程序中,android,android-layout,Android,Android Layout,我正在根据开发一个应用程序。我在layout land文件夹中为header.xml定义了横向布局,但当我将方向更改为横向时,定义的布局不会显示在屏幕中 你知道为什么吗 谢谢 更新: 活动代码: public class ACENewsFeedActivity extends ListActivity { // Progress Dialog private ProgressDialog pDialog; // Array list for list view

我正在根据开发一个应用程序。我在layout land文件夹中为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();
       }

       ....
}
公共类ACENewsFeedActivity扩展了ListActivity{
//进度对话框
私人对话;
//列表视图的数组列表
ArrayList rssItemList=新的ArrayList();
RSSParser RSSParser=新的RSSParser();
List rssItems=new ArrayList();
RssFeed RssFeed;
私有静态字符串TAG_TITLE=“TITLE”;
私有静态字符串TAG_LINK=“LINK”;
私有静态字符串TAG_DESRIPTION=“description”;
私有静态字符串TAG_PUB_DATE=“pubDate”;
//私有静态字符串标记\u GUID=“GUID”;//未使用
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.rss_项目列表);
/**
*调用背景线程将加载网站的最新文章
*@param网站的rss url
* */
新建loadRSSFeedItems().execute();
}
....
}
横向模式下的XMl布局:

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

Android允许您提供不同版本的资源文件,以支持特定的设备配置,包括屏幕大小/分辨率和(您正在尝试的)设备方向。当android加载布局文件时,它将首先查看
res/layout port
文件夹(如果是纵向的)或
res/layout land
文件夹(如果是横向的)。如果找不到该文件,它将在常规的
res/layout
文件夹中查找

此外,如前所述,当某些设备配置在运行时发生更改(如设备方向)时,android将通过保存状态、销毁状态,然后使用保存的状态信息启动当前正在运行的任何进程。这允许它再次加载布局文件,并且在尝试加载布局文件时,它将在文件夹中查找新的方向

因此,如果您以纵向方式启动应用程序,它将在
res/layout端口
res/layout
中加载文件。如果随后旋转设备以横向移动,则会破坏进程并重新启动。但是,这一次它将处于横向,因此它将检查布局文件的
res/layout land

如果您以这种方式设置了文件,但它没有按照您认为应该的方式运行,我会首先将两个不同的
header.xml
文件放在
布局栏
布局端口
文件夹中,其中一个是红色背景,另一个是绿色背景,以验证它是否使用了正确的文件。确保仔细检查文件引用,并可能使用Toast在屏幕上发布一些调试信息,以确保它正确地扩展了布局


android的默认行为是处理方向更改(包括销毁您的活动并创建一个新实例,该实例将重新加载所有布局文件)。除非清单文件中的活动标记包含属性android:configChanges=“orientation”,否则此默认行为将始终发生。(此标记可以接受方向以外的参数-android将处理所有事件的配置更改,但您作为参数传递给此标记的事件除外。)

如果您包括
android:configChanges=“orientation”
标记,则您告诉android不要破坏您的活动,也不要在设备方向改变时重新加载布局文件。它将调用一个方法(由您定义)来代替其默认行为,允许您自己进行任何更改来处理方向更改,而不是让android自动处理。这样做的目的是,如果破坏您的活动将是一个主要的不便,它不必被自动销毁


编辑:从评论讨论中添加了一些内容

您应该在该活动的
清单
文件中定义
android:configChanges=“orientation”
,并覆盖
setContentView()中的
onConfigChanged()
方法

像这样:

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

    super.onConfigurationChanged(newConfig);
}

您可以发布xml和活动的代码吗?我是否正确理解您在布局端口和布局区域文件夹中都有布局,并且布局端口以纵向显示,但布局区域未以横向显示?不,我没有陆地端口文件夹,我在布局旁边创建了布局区域(默认文件夹)包含header.xml文件的横向版本。我说的对吗?查看此链接是的,当您切换到横向时,它应该检查header.xml的
res/layout land
,如果存在,则在使用
res/layout
中的header.xml之前使用它。但是,如果您将一个放在
res/layout land
中,您也可以将另一个放在
res/layout port
中,因为这是屏幕方向的唯一两个选项。这也将最终防止
res/layout port
中的一个用于横向(因此可能对调试有用)。我创建了一个layout port文件夹并将header.xml文件放在那里,并对背景进行了一些更改以使其不同,但就在我启动纵向(或横向)应用程序时模式显示差异,当将方向更改为横向(纵向)时,它保持不变,没有差异!您是否也从
res/layout
文件夹中删除了header.xml?android的默认行为是处理方向更改(包括销毁您的活动并创建一个新实例)