【问题标题】:Android: RelativeLayout in ScrollViewAndroid:滚动视图中的相对布局
【发布时间】:2013-09-11 17:07:35
【问题描述】:

我有一个RelativeLayout 和多个ImageViews,当我转动屏幕时,ImageViews 变得混乱。所以我决定把它包装成ScrollView。但是ScrollView 不起作用!

谁能帮我解决这个问题?我知道正确的方法是设计一个GridViewListView,但是由于我有一些问题没有人回答我,所以我决定走这条路。

这是我的 xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ScrollView01"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:scrollbars="none" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/continuePizza"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="continue" />

    <Button
        android:id="@+id/finishP"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/continuePizza"
        android:layout_alignParentLeft="true"
        android:text="finish" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="16dp"
        android:src="@drawable/download" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/imageView1"
        android:layout_marginLeft="18dp"
        android:layout_toRightOf="@+id/imageView1"
        android:src="@drawable/download" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView1"
        android:layout_marginTop="18dp"
        android:src="@drawable/download" />

    <ImageView
        android:id="@+id/imageView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageView3"
        android:layout_centerVertical="true"
        android:src="@drawable/download" />

    <ImageView
        android:id="@+id/imageView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/imageView3"
        android:src="@drawable/download" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView5"
        android:layout_marginTop="17dp"
        android:src="@drawable/download" />

    <ImageView
        android:id="@+id/imageView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageView2"
        android:layout_alignTop="@+id/imageView5"
        android:layout_marginLeft="10dp"
        android:src="@drawable/download" />

    <ImageView
        android:id="@+id/imageView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageView7"
        android:layout_alignTop="@+id/imageView3"
        android:src="@drawable/download" />

</RelativeLayout>
</ScrollView>

【问题讨论】:

    标签: android android-layout android-scrollview android-relativelayout


    【解决方案1】:

    简单的解决方案,只需将 android:fillViewport="true" 添加到 Scrollview 即可:

    <ScrollView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
    
    <RelativeLayout ....... />
    
    </ScrollView>
    

    【讨论】:

      【解决方案2】:

      我在滚动视图中的相对布局遇到了同样的问题,为了克服这个问题,我用线性布局包裹了我的相对布局,尝试这样并从相对布局中删除方向

      <?xml version="1.0" encoding="utf-8"?>
      
      
      <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/ScrollView01"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:fillViewport="true"
      android:scrollbars="none" >
      
      <LinearLayout android:layout_width="match_parent"
      android:layout_height="match_parent">
      
      
      <RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      >
      
      
      <Button
          android:id="@+id/continuePizza"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_alignParentBottom="true"
          android:layout_alignParentRight="true"
          android:text="continue" />
      
      <Button
          android:id="@+id/finishP"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_above="@+id/continuePizza"
          android:layout_alignParentLeft="true"
          android:text="finish" />
      
      <ImageView
          android:id="@+id/imageView1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentLeft="true"
          android:layout_alignParentTop="true"
          android:layout_marginTop="16dp"
          android:src="@drawable/download" />
      
      <ImageView
          android:id="@+id/imageView2"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignTop="@+id/imageView1"
          android:layout_marginLeft="18dp"
          android:layout_toRightOf="@+id/imageView1"
          android:src="@drawable/download" />
      
      <ImageView
          android:id="@+id/imageView3"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_below="@+id/imageView1"
          android:layout_marginTop="18dp"
          android:src="@drawable/download" />
      
      <ImageView
          android:id="@+id/imageView5"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignLeft="@+id/imageView3"
          android:layout_centerVertical="true"
          android:src="@drawable/download" />
      
      <ImageView
          android:id="@+id/imageView6"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignTop="@+id/imageView3"
          android:src="@drawable/download" />
      
      <ImageView
          android:id="@+id/imageView4"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_below="@+id/imageView5"
          android:layout_marginTop="17dp"
          android:src="@drawable/download" />
      
      <ImageView
          android:id="@+id/imageView7"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignLeft="@+id/imageView2"
          android:layout_alignTop="@+id/imageView5"
          android:layout_marginLeft="10dp"
          android:src="@drawable/download" />
      <ImageView
          android:id="@+id/imageView8"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignLeft="@+id/imageView7"
          android:layout_alignTop="@+id/imageView3"
          android:src="@drawable/download" />
      
      </RelativeLayout>
      </LinearLayout>
      </ScrollView>
      

      【讨论】:

      • 我删除了 "android:fillViewport="true"" 并且成功了! tnx :)
      • 如果您稍后在删除 android:fillViewport="true" 时遇到其他问题,请尝试将滚动视图放入线性布局,即线性布局 --> 滚动视图 --> 相对布局
      【解决方案3】:

      当你使用ScrollView的时候,你应该知道只有当ScrollView的高度小于ScrollView的child的高度时才能滚动。
      为了解决这个问题,可以将 LinearLayout 的 Height 定义为 match_parent,它是 ScrollView 的唯一孩子。然后在Java代码中定义ScrollView的高度,比如scrollView.getChildAt(0).getHeight() - 1;,保证ScrollView的高度小于ScrollView的child的高度。
      对于您自己的答案,这不是在代码中使用幻数的好方法,例如 427dp 和 548dp。

      【讨论】:

        【解决方案4】:

        我可以在亲爱的 Ravi 的帮助下解决我的问题并稍作改动: 代码是这样的:

        <?xml version="1.0" encoding="utf-8"?>
        
        
        <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/ScrollView01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scrollbars="none" >
        
        
        
               <LinearLayout
                   android:layout_width="match_parent"
                   android:layout_height="427dp" >
        
        
        
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="548dp" >
        
        
        
        
            <Button
                android:id="@+id/continuePizza"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:text="continue" />
        
            <Button
                android:id="@+id/finishP"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_above="@+id/continuePizza"
                android:layout_alignParentLeft="true"
                android:text="finish" />
        
            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:layout_marginTop="16dp"
                android:src="@drawable/download" />
        
            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignTop="@+id/imageView1"
                android:layout_marginLeft="18dp"
                android:layout_toRightOf="@+id/imageView1"
                android:src="@drawable/download" />
        
            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/imageView1"
                android:layout_marginTop="18dp"
                android:src="@drawable/download" />
        
            <ImageView
                android:id="@+id/imageView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/imageView3"
                android:layout_centerVertical="true"
                android:src="@drawable/download" />
        
            <ImageView
                android:id="@+id/imageView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignTop="@+id/imageView3"
                android:src="@drawable/download" />
        
            <ImageView
                android:id="@+id/imageView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/imageView5"
                android:layout_marginTop="17dp"
                android:src="@drawable/download" />
        
            <ImageView
                android:id="@+id/imageView7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/imageView2"
                android:layout_alignTop="@+id/imageView5"
                android:layout_marginLeft="10dp"
                android:src="@drawable/download" />
            <ImageView
                android:id="@+id/imageView8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/imageView7"
                android:layout_alignTop="@+id/imageView3"
                android:src="@drawable/download" />
        
        </RelativeLayout>
        </LinearLayout>
        </ScrollView>
        

        【讨论】:

        • 我不认为硬编码高度尺寸是要走的路。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多