2012-04-16 106 views
2

我希望我可以在viewpager的頁面中顯示3個項目,但現在我只能設置viewpager的填充值和邊距值,因此它只在viewpager的頁面中顯示一個項目。我如何設置項目寬度?我認爲如果我可以設置更多的項目寬度,viewpager會在頁面中顯示更多項目。我可以設置viewpager的項目寬度嗎?

回答

3

您是否嘗試將頁邊距設置爲負值,請參閱setPageMargin(int)?如果我沒有記錯的話,我會閱讀某人意識到類似於你這樣描述的東西。

或者,你可以看看使用代替一個Gallery,雖然我不得不承認我不是他們的忠實粉絲,因爲他們似乎是不太靈活,更馬車。

+0

感謝您的回答,我會嘗試。我無法使用圖庫,因爲我需要向父視圖添加列表,圖庫對此有一些問題。 – 2012-04-16 05:09:47

+0

謝謝,它是由你的理想實現的。 – 2012-04-16 09:43:10

+0

這會導致部分幻燈片不可觸及,因爲它們之前的項目與它們重疊 – 2017-12-14 16:25:24

4

快速解答

你想在你爲ViewPager作出PagerAdapter實現覆蓋getPageWidth什麼。

例如,將其設置爲0.8f將使單個頁面僅覆蓋視圖頁面寬度的80%,以便可以看到下一頁和/或先前頁面的一部分。在https://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)

其他說明

@Override 
public float getPageWidth(final int position) { 
    return 0.8f; 
} 

更多信息,還要注意的是負利潤,只會導致單獨的頁面,以相互重疊。邊距用於定義每個頁面之間的空間。

如果沒有替代pageWidth配置(沒有setter,只有覆蓋),它將默認覆蓋100%,除非被拖動,否則不會顯示其他頁面的部分。

代碼示例

A的什麼是可能的非常好的概述可以在這裏https://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html

視圖尋呼機發現你的佈局內嵌配置適配器實現的

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

的例子,這進入onCreate或onViewCreated方法:

// get a reference to the viewpager in your layout 
ViewPager mViewPager = (ViewPager) findViewById(R.id.viewpager); 
// this margin defines the space between the pages in the viewpager mViewPager.setPageMargin(context.getResources().getDimensionPixelSize(R.dimen.margin_normal)); 
// setting the adapter on the viewpager, this could/should be a proper Adapter implementation in it's own class file instead 
mViewPager.setAdapter(new PagerAdapter() { 

    // just example data to show, 3 pages 
    String[] titles = {"Eins", "Zwei", "Drei"}; 
    int[] layouts = {R.layout.layout1, R.layout.layout2, R.layout.layout3}; 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     LayoutInflater inflater = LayoutInflater.from(MainActivity.this); 
     // here you can inflate your own view and dress up 
     ViewGroup layout = (ViewGroup) inflater.inflate(layouts[position], container, false); 
     container.addView(layout); 
     return layout; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((View)object); 
    } 

    @Override 
    public float getPageWidth(final int position) { 
     return 0.8f; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return titles[position]; 
    } 

    @Override 
    public int getCount() { 
     return layouts.length; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 
}); 

基於https://newfivefour.com/android-viewpager-simple-views.html的示例代碼

+0

commonsware鏈接(第二個)確實有幫助! – 2017-11-08 18:27:55

相關問題