更改方向会删除UI元素

时间:2015-08-20 19:30:13

标签: java android android-layout android-listview android-scrollview

当手机处于纵向模式时,它会在顶部和下方显示标题和图像,其中包含按钮和带有注释的ListView。但是,当我将手机设置为横向模式时,按钮和ListView消失,仅显示标题和图像。我基本上不能在图像下面滚动了。

还有第三个元素 - 身体的TextView - 也在ScrollView内:每个布局都会包含内容或图片TextView。当TextView具有内容而没有图像时,会发生同样的事情。当图像或文本占用整个屏幕时,不会发生这种情况。

肖像模式:

enter image description here

横向模式:

enter image description here

随附代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="net.vannevel.redditapp.activities.PostActivity">

    <TextView
        android:id="@+id/postDetailTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textColor="#000" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/postDetailImage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/postDetailBody"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/postDetailViewOnlineButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onViewOnlineButtonClicked"
        android:text="View original source" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="COMMENTS" />

    <ListView
        android:id="@+id/postDetailCommentList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

2 个答案:

答案 0 :(得分:2)

所以你的问题是滚动视图中的项目高于横向屏幕高度。即使你在ScrollView内滚动,一旦你到达它的末尾就没有什么可以做的。放在ScrollView之外的所有元素都将在屏幕外,并放置在任何可滚动容器之外。

我可以看到3种可能的解决方案:

1 - 将固定大小设置为滚动视图,使其不占据整个屏幕,以便让其他视图进入。不实用,但是:横向电话意味着身高矮,你必须适合一张照片并列出评论......

2 - 横向不同的布局 - 左边的图片,右边的评论列表

3 - 摆脱ScrollView并将ListView上的所有内容设置为ListView标题(addHeaderView) 例如:

第1步 - 提取ListView之上的所有内容并将其放入不同的布局文件中 - 让我们称之为header.xml

第2步 - 夸大布局:

View headerView = inflater.inflate(R.layout.header, listView, false);

第3步 - 像现在一样初始化标题上的项目

步骤4 - 将视图设置为列表ListView的标题:

listView.addHeaderView(headerView, null, false);

这种方法的副作用是标题,现在是ListView的一部分,它会在滚动列表时滚动。此外,它将使您在适配器中的位置偏移1。

答案 1 :(得分:1)

变化:

   <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:orientation="vertical">

或实施两个layouts portlandlandscape方向。