摘要:一簡介使用起來就是我們通過創建給它填充多個,左右滑動時,切換不同的。
一、簡介
Viewpager使用起來就是我們通過創建adapter給它填充多個view,左右滑動時,切換不同的view。Google官方是建議我們使用Fragment來填充ViewPager的,這樣 可以更加方便的生成每個Page,以及管理每個Page的生命周期二、引入相關依賴
implementation "com.android.support:design:28.0.0"三、效果圖 四、代碼實現
xml
activity中通過id來尋找控件
viewPager = findViewById(R.id.viewPager); tabLayout = findViewById(R.id.tabLayout);
創建ViewPager適配器
public class PageAdapter extends FragmentPagerAdapter { ListfragmentList = new ArrayList<>(); List titleList = new ArrayList<>(); public PageAdapter(FragmentManager fm,List fragmentList,List titleList) { super(fm); this.fragmentList = fragmentList; this.titleList = titleList; } @Override public Fragment getItem(int i) { return fragmentList.get(i); } @Override public int getCount() { return fragmentList.size(); } @Nullable @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } }
準備相關數據(fragment,title)
private ListgetTitleList() { titleList.add("Tab1"); titleList.add("Tab2"); return titleList; } private List getFragmentList() { pageModels.add(new PageModel(R.layout.examplelayout1)); pageModels.add(new PageModel(R.layout.examplelayout2)); for (int i = 0; i < pageModels.size(); i++) { pageFragment = PageFragment.newInstance(pageModels.get(i).exampleLayoutRes); fragmentList.add(pageFragment); } return fragmentList; } class PageModel { @LayoutRes int exampleLayoutRes; public PageModel(@LayoutRes int exampleLayoutRes) { this.exampleLayoutRes = exampleLayoutRes; } }
設置viewPager適配器
viewPager.setAdapter(new PageAdapter(getSupportFragmentManager(), getFragmentList(), getTitleList()));
設置tab標題
如果不設置此項,tab將無法顯示
tabLayout.setupWithViewPager(viewPager);五、附上源碼
布局相關:
activity_main
fragment_page
examplelayout1
examplelayout2
功能代碼
MainActivity
public class MainActivity extends AppCompatActivity { ViewPager viewPager; TabLayout tabLayout; ListtitleList = new ArrayList<>(); List fragmentList = new ArrayList<>(); List pageModels = new ArrayList<>(); PageFragment pageFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); doBisness(); } private void doBisness() { viewPager = findViewById(R.id.viewPager); tabLayout = findViewById(R.id.tabLayout); viewPager.setAdapter(new PageAdapter(getSupportFragmentManager(), getFragmentList(), getTitleList())); tabLayout.setupWithViewPager(viewPager); } private List getTitleList() { titleList.add("Tab1"); titleList.add("Tab2"); return titleList; } private List getFragmentList() { pageModels.add(new PageModel(R.layout.examplelayout1)); pageModels.add(new PageModel(R.layout.examplelayout2)); for (int i = 0; i < pageModels.size(); i++) { pageFragment = PageFragment.newInstance(pageModels.get(i).exampleLayoutRes); fragmentList.add(pageFragment); } return fragmentList; } class PageModel { @LayoutRes int exampleLayoutRes; public PageModel(@LayoutRes int exampleLayoutRes) { this.exampleLayoutRes = exampleLayoutRes; } } }
PageFragment
public class PageFragment extends Fragment { @LayoutRes int exampleLayoutRes; /** * Use this factory method to create a new instance of * this fragment using the provided parameters. */ public static PageFragment newInstance(@LayoutRes int exampleLayoutRes) { PageFragment fragment = new PageFragment(); Bundle args = new Bundle(); args.putInt("exampleLayoutRes", exampleLayoutRes); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { exampleLayoutRes = getArguments().getInt("exampleLayoutRes"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_page, container, false); ViewStub exampleStub = view.findViewById(R.id.exampleViewStub); exampleStub.setLayoutResource(exampleLayoutRes); exampleStub.inflate(); return view; } }
PageAdapter
public class PageAdapter extends FragmentPagerAdapter { List六、項目github地址fragmentList = new ArrayList<>(); List titleList = new ArrayList<>(); public PageAdapter(FragmentManager fm,List fragmentList,List titleList) { super(fm); this.fragmentList = fragmentList; this.titleList = titleList; } @Override public Fragment getItem(int i) { return fragmentList.get(i); } @Override public int getCount() { return fragmentList.size(); } @Nullable @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } }
https://github.com/fr1014/vie...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72694.html
摘要:開發過程中,特別是新開的項目,底部狀態欄的切換使用的頻率非常的高,主要的實現方式有這里我先介紹前面兩種實現方式,后面兩種后期再貼出實現方式。代碼地址底部公眾號回復底部狀態欄切換即可獲取。 Android開發過程中,特別是新開的項目,底部狀態欄的切換使用的頻率非常的高,主要的實現方式有: (1)、TabLayout + Fragment (2)、FragmentTabHo...
摘要:初步實現之前在知乎上看到有人對微信的設計改動將使用頻率高的朋友圈消息提醒和公眾號這三個功能獨立出來放在首頁。 1、介紹和準備 我們在使用手機App時不難會看到這樣的頁面上面是一組起導航作用的標簽,點擊標簽就會切換到相應的頁面;在不同的頁面中滑動時,標簽的樣式(文字大小或者顏色)也會發生變化。這樣你任何時候都能一眼看出自己停留在哪個頁面。這個布局出鏡率實在太高了,我甚至敢說每個學Andr...
閱讀 3300·2021-09-30 09:54
閱讀 3782·2021-09-22 15:01
閱讀 3105·2021-08-27 16:19
閱讀 2572·2019-08-29 18:39
閱讀 2146·2019-08-29 14:09
閱讀 623·2019-08-26 10:23
閱讀 1337·2019-08-23 12:01
閱讀 1862·2019-08-22 13:57