加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在layout-land中定义的xml布局没有出现在android应用程序中

发布时间:2020-12-16 07:51:25 所属栏目:百科 来源:网络整理
导读:我正在根据 this example开发应用程序.我在layout-land文件夹中为header.xml定义了横向布局,但是当我将方向更改为横向时,定义的布局不会出现在屏幕中. 知道为什么吗? 谢谢 更新 : 活动代码: public class ACENewsFeedActivity extends ListActivity { //
我正在根据 this example开发应用程序.我在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();
       }

       ....
}

横向模式下的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文件夹.

另外,如here所述,当某些设备配置在运行时期间发生变化(如设备方向)时,android将通过保存状态,销毁状态,然后使用保存的状态信息启动它来重新启动当前正在运行的任何进程.这允许它再次加载布局文件,当它尝试加载它时,它将看起来是新方向的文件夹.

因此,如果您以纵向方式启动应用程序,它将以res / layout-port或res / layout加载文件.如果您然后将设备旋转到横向,它将破坏您的过程并重新启动.但是,这次它将处于横向状态,因此它将检查res / layout-land而不是布局文件.

如果您以这种方式设置文件,但它没有按照您的想法运行,我首先通过在布局 – 布局和布局中放置两个不同的header.xml文件来验证它肯定没有使用正确的文件 – 端口文件夹,可能是一个红色背景和一个绿色背景.确保仔细检查文件引用,并使用Toast在屏幕上发布一些调试信息,以确保它正确地扩展布局.

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读