2013-04-18 67 views
4

我目前正在開發一款應用程序,希望能像「電子書」播放器一樣行事。閱讀了大量與片段相關的教程後,我決定採用「片段/視圖策略」方法。viewpager中的多窗格片段

進入更多細節之後,我決定遵循Linden Darlinghttps://plus.google.com/100467024733771542884/posts/24HcFW5hEiV的嵌套片段的優秀教程。

我爲每個單獨的書頁創建了一個'webview'片段,並帶有它自己的佈局。因此,如果我的書由6頁組成,那麼我將擁有BookPage1Fragment,BookPage2Fragment,BookPage3Fragment,BookPage4Fragment,BookPage5Fragment,BookPage6Fragment等。我設法在viewpager中使這個工作,所以所有的通過片段掃描工作正常。問題是,屏幕上一次只能看到一個片段。當在較小的設備或縱向視圖上運行應用程序時,我希望在兩個片段(多窗格)上運行大型設備上的應用程序和橫向和單個窗格(一次一個片段)。我想要顯示一個左窗格和一個右窗格的兩個窗格佈局。

見下文代碼:

public class ParentFragment extends Fragment { 

public static final String TAG = ParentFragment.class.getSimpleName(); 

public static ParentFragment newInstance() { 
return new ParentFragment(); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setRetainInstance(true); 
} 

@Override 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle   savedInstanceState) { 
return inflater.inflate(R.layout.fragment_parent, container, false); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
super.onViewCreated(view, savedInstanceState); 

ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewPager); 
mViewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 
} 

public static class MyAdapter extends FragmentPagerAdapter { 
public MyAdapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public int getCount() { 
    return 6; 
} 

/* 

@Override 
public Fragment getItem(int position) { 
    Bundle args = new Bundle(); 
    args.putInt(TextViewFragment.POSITION_KEY, position); 
    return TextViewFragment.newInstance(args); 
} 


*/ 

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
    case 0: 
     return new BookPage1Fragment(); 
    case 1: 
     return new BookPage2Fragment(); 
    case 2: 
     return new BookPage3Fragment(); 
    case 3: 
     return new BookPage4Fragment(); 
    case 4: 
     return new BookPage5Fragment(); 
    case 5: 
     return new BookPage6Fragment(); 


    default: 
     return getItem(0); 
    } 
} 


@Override 
public CharSequence getPageTitle(int position) { 
    return "Fragment # " + position; 
} 

} 

} 

基本上出現在橫向模式下的兩個片段,並出現在當在縱向模式下,就像實施例描述了developer.blogspot http://android-developers.blogspot.in/2011/02/android-30-fragments-api.html一次一個片段,但嵌入viewpager內。

這是我的main.layout。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout> xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

</RelativeLayout> 

這裏是我的WebView片段

public class WebViewFragment extends Fragment { 

@SuppressLint("SetJavaScriptEnabled") 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View mainView = (View) inflater.inflate(R.layout.fragment_web, container, false); 
     WebView myWebView = (WebView) mainView.findViewById(R.id.webview); 
     myWebView.loadUrl("file:///android_asset/Ebook-001.html"); 


     myWebView.setWebViewClient(new MyWebViewClient()); 
     myWebView.getSettings().setBuiltInZoomControls(true); 
     myWebView.getSettings().setJavaScriptEnabled(true); 
     myWebView.getSettings().setSupportZoom(true); 
     myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     myWebView.getSettings().setAllowFileAccess(true); 
     myWebView.getSettings().setDomStorageEnabled(true); 
     myWebView.getSettings().setUseWideViewPort(true); 
     myWebView.getSettings().setLoadWithOverviewMode(true); 
      return mainView; 
     } 

    } 

,這裏是我的WebView片段佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<WebView 
    android:id="@+id/webview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

</LinearLayout> 

所以在最後我想:

1:顯示viewpager中的兩個片段處於橫向模式,單個處於縱向模式。

2:使用一個活動的設備尺寸無關,並在運行時決定是否要在佈局片段組合(以創建多窗格設計)或交換片段(以創建一個單窗格設計)

希望這一切都有道理!預先感謝您的任何建議...

回答

1

你必須創建一個佈局文件的景觀mode.You必須創建在res文件夾與佈局,土地name.In的文件夾中創建一個同名的佈局放置在佈局文件中。當屏幕切換到橫向模式時,Android會自動訪問它。