2013-07-24 90 views
1

我想要一個包含兩個視圖的LinearLayout的ScrollView。第一個視圖應占據整個屏幕,第二個視圖最初在屏幕之外(但可以滾動到)。這是可以實現的嗎?有兩個視圖的ScrollView,第一視圖填充屏幕

+0

下來選民當你失望投票問題請找時間發表評論,爲什麼倒投票 –

回答

3

使用此代碼

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

和你的活動GOSE像下面

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; 
     } 

    } 
+0

謝謝!完美的作品。 – Tmdean

+1

如果在第一幀(全屏)FrameLayout下方添加要素(如TextViews等),其高度不等於第一個FrameLayout,則最好將偵聽器設置爲ScrollView並測量其高度,而不是LinearLayout。然後,不需要重力,並且第一個FrameLayout下面的內容可以是任何東西(可以刪除第二個FrameLayout)。 – javaxian

2

您不需要ScrollView,ViewPager更適合您的需求。另外,既然你希望它是垂直的,你應該檢查一下:Directional ViewPager

+0

如果他想在兩頁之間滾動(這就是他所說的)(並且保持兩頁之間的滾動),那麼'ViewPager'不是答案。 – Luksprog

+0

@Luksprog,他說他想使用ScrollView,但不是爲什麼,他確實說過他希望一個全屏佈局可見,一個不能立即可見,我不明白爲什麼他需要強制他們頁面,但也需要它們擴展整個屏幕,然後他可以在他的ScrollView中嵌套2個LinearLayouts。看起來他只是想強制分頁成ScrollView ... – Tonithy

0

我曾經想過在iPhone中實現這個最難的時候,也許這些想法會幫助你。我所擁有的是帶有筆記本風格線條的背景視圖,以及帶有文本的視圖,當然他們必須一起滾動。我將兩者都添加到ScrollView中,並截取了view1的「scrollViewDidScroll」,並製作了一個view2.contentOffset = view2.contentOffset,以便它們保持「粘貼」狀態。我剛開始使用Android,所以我不知道如何在那裏實現這個目標,但我認爲這個原則不會有太大的不同。希望這有助於:)

相關問題