0

当手机处于肖像模式时,它会在顶部和底部显示标题和图片,其中包含按钮和注释。但是,当我将手机设为横向模式时,按钮和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

所以你的问题是你在滚动视图内的项目比在横向上的屏幕高度更高。即使你在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.

+0

我想一个单独的布局可能实际上是最有意义的。但是,即使在纵向模式下:例如,当文字对于屏幕来说太大时,它将被置于滚动视图中,从而从屏幕移除其他项目(注释)。由于它已经是肖像模式,我无法用其他布局修复此问题。那么建议的方法是什么? –

+0

我会选择#3或在不同的屏幕上显示注释。我会尽快更新答案,并提供更多有关选择的详细信息#3 –

+0

好吧,欢呼声。这给了我足够的工作。我很欣赏你提供的解释。 –

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

或实施两个layoutsportlandlandscape的方向。

+0

这并没有什么区别(500dp或其他)。我不知道如何创建不同的布局文件会有所作为,因为它将与现在的布局相同。 –

+0

你试过我的解决方案吗? –

+0

我做过了,但是你把它放在错误的控件上:它是'ScrollView',它需要'layout_height'设置为'300dp'。虽然这感觉有点不好意思,但我会牢记在心。 –