ScrollView有两个视图,第一个视图填充屏幕

时间:2013-07-24 04:17:13

标签: android

我想要一个包含两个视图的LinearLayout的ScrollView。第一个视图应该占据整个屏幕,第二个视图最初离开屏幕(但它可以滚动到)。这可以实现吗?

3 个答案:

答案 0 :(得分:4)

使用此代码

<ScrollView 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:fillViewport="true"
    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=".MainActivity" >

    <LinearLayout
        android:id="@+id/linlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <FrameLayout
            android:id="@+id/f1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#468432" >

        </FrameLayout>

        <FrameLayout
            android:id="@+id/f2"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#ff8222" >

        </FrameLayout>

    </LinearLayout>

</ScrollView>

你的活动就像下面的

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.LinearLayout.LayoutParams; 
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

    public class MainActivity extends Activity {

        LinearLayout layout ;
        FrameLayout f1,f2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            layout = (LinearLayout)findViewById(R.id.linlayout);
            f1=(FrameLayout) findViewById(R.id.f1);
            f2=(FrameLayout) findViewById(R.id.f2);
            ViewTreeObserver vto = layout.getViewTreeObserver(); 
            vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
                @Override 
                public void onGlobalLayout() { 
                    layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
                    int width  = layout.getMeasuredWidth();
                    int height = layout.getMeasuredHeight(); 

                    f1.setLayoutParams(new LayoutParams(width, height));
                    f2.setLayoutParams(new LayoutParams(width, height));
                } 
            });
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

    }

答案 1 :(得分:2)

您不需要ScrollView,ViewPager更适合您的需求。此外,由于您希望它是垂直的,您应该检查一下:Directional ViewPager

答案 2 :(得分:0)

我曾经在iPhone上尝试实现这一目标时遇到的困难,也许这些想法会对你有所帮助。我所拥有的是带有笔记本样式的线条的背景视图,以及带有文本的视图,当然它们必须一起滚动。我将两者都添加到ScrollView中,然后截获了view1的“scrollViewDidScroll”并执行了view2.contentOffset = view2.contentOffset,以便它们保持“粘合”状态。我刚开始使用Android,所以我不知道如何在那里完全实现这一目标,但我认为原则并没有太大的不同。希望这会有所帮助:)