亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

TabLayout+ViewPager實現切頁的示例代碼

2019-10-21 21:31:12
字體:
來源:轉載
供稿:網友

安卓使用TabLayout+ViewPager+Fragment 實現頁面切換,可實現左右滑動切換視圖界面和點擊切換

可自定義菜單欄是在頂部還是在底部

一、實現效果:

TabLayout,ViewPager,切頁,代碼

二、實現過程:

2.1 一些重要的設置

添加必須依賴:

因為需要使用:import android.support.design.widget.TabLayout;,所以必須添加下列依賴

compile 'com.android.support:design:23.3.0'

主布局文件編寫:

頂部或者底部顯示,只要更改ViewPager和TabLayout排列順序即可

<?xml version="1.0" encoding="utf-8"?><LinearLayout 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"  xmlns:app="http://schemas.android.com/apk/res-auto"  android:paddingBottom="0dp"  android:paddingLeft="0dp"  android:paddingRight="0dp"  android:orientation="vertical"  android:paddingTop="0dp"  tools:context="com.example.fafa.MainActivity">  <android.support.v4.view.ViewPager    android:id="@+id/viewpager"    android:layout_width="match_parent"    android:layout_height="0dp"    android:layout_weight="1"    /><!--app:tabIndicatorColor=""  指示器顏色app:tabIndicatorHeight="" 指示器高度,設置為0就是沒有指示器app:tabTextColor=""  Tab文本默認顏色app:tabSelectedTextColor=""   Tab文本被選中后的顏色app:tabTextAppearance=""   為Tab文本設置樣式,一般是需要為Tab加圖標時使用app:tabMode="" 只有兩個值:fixed、scrollable其中 fixed用于標題欄少的情況,每個Tab可以平分屏幕寬度其中 scrollable用于標題欄多出屏幕的情況,如果標題欄少的時候用很難看,占不滿屏幕app:tabGravity="center" 整體居中,不可與上共用app:tabBackground=""  TabLayout背景,和android:background=""效果一樣app:tabGravity=""  對齊方式: 居中顯示center、fill填滿-->  <android.support.design.widget.TabLayout    android:id="@+id/tabs2"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_gravity="center"    app:tabMode="fixed"    app:tabIndicatorColor="@color/colorLv"    app:tabTextColor="@android:color/black"    app:tabSelectedTextColor="@color/colorred"    /></LinearLayout>

2.2 僅字符菜單欄顯示實現:

未加入圖片顯示,實現較為簡單

TabLayout,ViewPager,切頁,代碼

基本邏輯代碼:

每個界面使用不同的fragment,進行一 一對應

import android.support.design.widget.TabLayout;public class MainActivity extends AppCompatActivity {  private ViewPager viewPager;  private TabLayout tabLayout;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    tabLayout = (TabLayout) findViewById(R.id.tabs2);    viewPager = (ViewPager) findViewById(R.id.viewpager);    //設置界面文件和文字一一對應    final Fragment[] fragments = {new Fragment0(), new Fragment1(), new Fragment2()};    final String[] titles = {"界面1", "界面2", "界面3"}; //添加tablayout中的豎線,每一項的中間分隔線 //LinearLayout linearLayout = (LinearLayout) tabLayout.getChildAt(0);// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);// linearLayout.setDividerDrawable(ContextCompat.getDrawable(this, R.mipmap.fg)); //每項只進入一次 viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {   @Override   public Fragment getItem(int position) {     return fragments[position];   }   @Override   public int getCount() {     return fragments.length;   }   @Override   public CharSequence getPageTitle(int position) {     return titles[position];   } }); tabLayout.setupWithViewPager(viewPager); tabLayout.getTabAt(1).select();//設置第一個為選中  }}

2.3 字符和圖片菜單欄實現

圖片加漢字菜單欄,菜單欄每項都是一個視圖可以自定義設計

TabLayout,ViewPager,切頁,代碼

菜單欄每項的布局文件設計:

一個圖片顯示和一個文字顯示,定義為垂直布局,其中android:layout_gravity="center"是把控件居中,這里不寫,在菜單欄顯示時可能會出現錯位

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:orientation="vertical"  android:id="@+id/item_view"  android:layout_height="match_parent">  <ImageView    android:layout_width="wrap_content"    android:src="@mipmap/ic_launcher"    android:id="@+id/item_img"    android:layout_gravity="center"    android:layout_height="wrap_content" />  <TextView    android:layout_width="wrap_content"    android:text="xxxx"    android:layout_gravity="center"    android:id="@+id/item_text"    android:layout_height="wrap_content" /></LinearLayout>

主布局文件更改:

在主布局文件的<android.support.design.widget.TabLayout>更改android:layout_height="70dp",表示其菜單欄的高度改變。

定義必要的類變量:

private ViewPager viewPager; private TabLayout tabLayout; //設置界面文件和文字一一對應 private Fragment[] Lfragments = {new Fragment0(), new Fragment1(), new Fragment2(),new Fragment3()}; private String[] Ltitles = {"界面1", "界面2", "界面3","界面4"}; //未選中圖片 private int[] Limg = {R.mipmap.an1,R.mipmap.an2,R.mipmap.an3,R.mipmap.an4}; //選中圖片 private int[] Limgn = {R.mipmap.ann1,R.mipmap.ann2,R.mipmap.ann3,R.mipmap.ann4};//配置默認選中第幾項 private int ItemWhat=1;

數據初始化及基本界面加載:

//只進入一次,初始化viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {  @Override  public Fragment getItem(int position) {    return Lfragments[position];  }  @Override  public int getCount() {    return Lfragments.length;  }  @Override  public CharSequence getPageTitle(int position) {    return Ltitles[position];  }});//綁定tabLayout.setupWithViewPager(viewPager);//設置默認選中頁,宏定義tabLayout.getTabAt(ItemWhat).select();viewPager.setOffscreenPageLimit(3); //設置向左和向右都緩存的頁面個數//初始化菜單欄顯示for (int i = 0; i < tabLayout.getTabCount(); i++) {  //尋找到控件  View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.items, null);   LinearLayout mTabView = (LinearLayout) view.findViewById(R.id.item_view);  TextView mTabText = (TextView) view.findViewById(R.id.item_text);  ImageView mTabIcon = (ImageView) view.findViewById(R.id.item_img);  mTabText.setText(Ltitles[i]);  mTabIcon.setImageResource(Limg[i]);  //設置不可點擊  // mTabView.setClickable(true);  //更改選中項樣式  if(i==ItemWhat){    mTabIcon.setImageResource(Limgn[i]);    mTabText.setTextColor(ContextCompat.getColor(this, R.color.colorRed));  }  //設置樣式  tabLayout.getTabAt(i).setCustomView(view);}

監聽選擇事件:

//是否選中監聽tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {  @Override  public void onTabSelected(TabLayout.Tab tab) {   //選中時進入,改變樣式    ItemSelect(tab);    //onTabselected方法里面調用了viewPager的setCurrentItem 所以要想自定義OnTabSelectedListener,也加上mViewPager.setCurrentItem(tab.getPosition())就可以了    viewPager.setCurrentItem(tab.getPosition());  }  @Override  public void onTabUnselected(TabLayout.Tab tab) {   //未選中進入,改變樣式    ItemNoSelect(tab);  }  @Override  public void onTabReselected(TabLayout.Tab tab) {   //重新選中  }});

選中和非選中,更改其中顯示樣式:

//某個項選中,改變其樣式 private void ItemSelect(TabLayout.Tab tab) {   View customView = tab.getCustomView();   TextView tabText = (TextView) customView.findViewById(R.id.item_text);   ImageView tabIcon = (ImageView) customView.findViewById(R.id.item_img);   tabText.setTextColor(ContextCompat.getColor(this, R.color.colorRed));   String stitle = tabText.getText().toString();   for(int i=0;i<Ltitles.length;i++){     if(Ltitles[i].equals(stitle)){       //Toast.makeText(MainActivity.this,"xxx+"+i,Toast.LENGTH_SHORT).show();       tabIcon.setImageResource(Limgn[i]);     }   } }//某個項非選中,改變其樣式 private void ItemNoSelect(TabLayout.Tab tab) {   View customView = tab.getCustomView();   TextView tabText = (TextView) customView.findViewById(R.id.item_text);   ImageView tabIcon = (ImageView) customView.findViewById(R.id.item_img);   tabText.setTextColor(ContextCompat.getColor(this, R.color.colorBlack));   String stitle = tabText.getText().toString();   for(int i=0;i<Ltitles.length;i++){     if(Ltitles[i].equals(stitle)){       tabIcon.setImageResource(Limg[i]);     }   } }

整體代碼:

import android.support.design.widget.TabLayout;public class MainActivity extends AppCompatActivity {  private ViewPager viewPager;  private TabLayout tabLayout;  //設置界面文件和文字一一對應  private Fragment[] Lfragments = {new Fragment0(), new Fragment1(), new Fragment2(),new Fragment3()};  private String[] Ltitles = {"界面1", "界面2", "界面3","界面4"};  //未選中圖片  private int[] Limg = {R.mipmap.an1,R.mipmap.an2,R.mipmap.an3,R.mipmap.an4};  //選中圖片  private int[] Limgn = {R.mipmap.ann1,R.mipmap.ann2,R.mipmap.ann3,R.mipmap.ann4};  //配置默認選中第幾項  private int ItemWhat=1;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    //找控件    tabLayout = (TabLayout) findViewById(R.id.tabs2);    viewPager = (ViewPager) findViewById(R.id.viewpager);    //添加tablayout中的豎線,每一項的中間分隔線    //LinearLayout linearLayout = (LinearLayout) tabLayout.getChildAt(0);    // linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);    // linearLayout.setDividerDrawable(ContextCompat.getDrawable(this, R.mipmap.fg));    //只進入一次,初始化    viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {      @Override      public Fragment getItem(int position) {        return Lfragments[position];      }      @Override      public int getCount() {        return Lfragments.length;      }      @Override      public CharSequence getPageTitle(int position) {        return Ltitles[position];      }    });    //綁定    tabLayout.setupWithViewPager(viewPager);    //設置默認選中頁,宏定義    tabLayout.getTabAt(ItemWhat).select();    viewPager.setOffscreenPageLimit(3); //設置向左和向右都緩存的頁面個數    //初始化菜單欄顯示    for (int i = 0; i < tabLayout.getTabCount(); i++) {      //尋找到控件      View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.items, null);       LinearLayout mTabView = (LinearLayout) view.findViewById(R.id.item_view);      TextView mTabText = (TextView) view.findViewById(R.id.item_text);      ImageView mTabIcon = (ImageView) view.findViewById(R.id.item_img);      mTabText.setText(Ltitles[i]);      mTabIcon.setImageResource(Limg[i]);      //設置不可點擊      // mTabView.setClickable(true);      //更改選中項樣式      if(i==ItemWhat){        mTabIcon.setImageResource(Limgn[i]);        mTabText.setTextColor(ContextCompat.getColor(this, R.color.colorRed));      }      //設置樣式      tabLayout.getTabAt(i).setCustomView(view);    }    //是否選中監聽    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {      @Override      public void onTabSelected(TabLayout.Tab tab) {       //選中時進入,改變樣式        ItemSelect(tab);        //onTabselected方法里面調用了viewPager的setCurrentItem 所以要想自定義OnTabSelectedListener,也加上mViewPager.setCurrentItem(tab.getPosition())就可以了        viewPager.setCurrentItem(tab.getPosition());      }      @Override      public void onTabUnselected(TabLayout.Tab tab) {       //未選中進入,改變樣式        ItemNoSelect(tab);      }      @Override      public void onTabReselected(TabLayout.Tab tab) {       //重新選中      }    });}  //某個項選中,改變其樣式  private void ItemSelect(TabLayout.Tab tab) {    View customView = tab.getCustomView();    TextView tabText = (TextView) customView.findViewById(R.id.item_text);    ImageView tabIcon = (ImageView) customView.findViewById(R.id.item_img);    tabText.setTextColor(ContextCompat.getColor(this, R.color.colorRed));    String stitle = tabText.getText().toString();    for(int i=0;i<Ltitles.length;i++){      if(Ltitles[i].equals(stitle)){        //Toast.makeText(MainActivity.this,"xxx+"+i,Toast.LENGTH_SHORT).show();        tabIcon.setImageResource(Limgn[i]);      }    }  }  //某個項非選中,改變其樣式  private void ItemNoSelect(TabLayout.Tab tab) {    View customView = tab.getCustomView();    TextView tabText = (TextView) customView.findViewById(R.id.item_text);    ImageView tabIcon = (ImageView) customView.findViewById(R.id.item_img);    tabText.setTextColor(ContextCompat.getColor(this, R.color.colorBlack));    String stitle = tabText.getText().toString();    for(int i=0;i<Ltitles.length;i++){      if(Ltitles[i].equals(stitle)){        tabIcon.setImageResource(Limg[i]);      }    }  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲热线99精品视频| 成人国产亚洲精品a区天堂华泰| 日韩激情av在线免费观看| 日韩中文字幕免费看| 国产日韩欧美中文| 国产成人一区二区三区电影| 国产精品日日摸夜夜添夜夜av| 久久最新资源网| 国产亚洲欧美aaaa| 亚洲欧美视频在线| 亚洲国产日韩欧美在线图片| 国产成人精品免高潮在线观看| 国产精品一区二区三区免费视频| 国产一区二区三区三区在线观看| 国产精品第一区| 国产精品久久久久久久久免费| 成人h片在线播放免费网站| 国产在线观看不卡| 国产精品久久久久久久久久久久久久| 国产精品日韩在线一区| 亚洲精品久久久久中文字幕二区| 68精品久久久久久欧美| 欧美另类69精品久久久久9999| 国产亚洲精品久久久久久| 国产精品久久9| 欧美老妇交乱视频| 国产99在线|中文| 97视频免费在线观看| 亚洲人成啪啪网站| 国产91精品黑色丝袜高跟鞋| 日韩欧美精品网站| 国产玖玖精品视频| 国产69精品久久久久久| 久久久久久国产| 亚洲第一级黄色片| 日韩在线视频导航| 国产精品69久久久久| 精品亚洲精品福利线在观看| 精品国产欧美成人夜夜嗨| 国产一区二区久久精品| 中文字幕亚洲专区| 久久精品久久久久久| 在线免费观看羞羞视频一区二区| 国产精品九九九| 91国内免费在线视频| 欧美电影免费观看网站| 久久亚洲精品一区二区| 国产成人av网址| 色综合色综合久久综合频道88| 亚洲国产成人av在线| 欧美怡春院一区二区三区| 欧美精品激情blacked18| 欧美不卡视频一区发布| 亚洲国产黄色片| 日本午夜精品理论片a级appf发布| 国产一区二中文字幕在线看| 91av在线精品| 日韩av电影免费观看高清| 最近2019中文免费高清视频观看www99| 国产精品黄色影片导航在线观看| 欧美精品在线观看| 日韩有码片在线观看| 亚洲综合色激情五月| 尤物精品国产第一福利三区| 亚洲成色777777女色窝| 欧美在线观看www| 国产精品对白刺激| 国产日韩欧美影视| 成人国产精品久久久| 亚洲精品av在线播放| 全色精品综合影院| 亚洲丝袜一区在线| 欧美激情视频在线| 亚洲成avwww人| 1769国内精品视频在线播放| 亚洲色图色老头| 国产经典一区二区| 午夜精品一区二区三区在线播放| 亚洲片在线资源| 欧美国产日韩一区二区在线观看| 久久九九热免费视频| 国产高清视频一区三区| 国产精品一区二区三区在线播放| 久色乳综合思思在线视频| 性欧美xxxx视频在线观看| 精品人伦一区二区三区蜜桃网站| 国产日产欧美a一级在线| 国产精品一区二区三| 久久久91精品国产一区不卡| 欧美高清一级大片| 57pao成人国产永久免费| 中日韩午夜理伦电影免费| 国产性猛交xxxx免费看久久| 亚洲成成品网站| 欧美日韩视频在线| 韩国视频理论视频久久| 日本人成精品视频在线| 中文字幕亚洲图片| 91成人在线观看国产| 136fldh精品导航福利| 亚洲精品福利免费在线观看| 国产日韩欧美综合| 国产精品国模在线| 亚洲最新视频在线| 日韩中文字幕在线视频| 色综合久久中文字幕综合网小说| 国产精品一二三在线| 日韩在线中文字| 国模精品视频一区二区三区| 国产亚洲美女精品久久久| 国产精品久久久久久久久久久久| 精品无人区乱码1区2区3区在线| 欧美激情videoshd| 日本国产高清不卡| 国产精品久久久久999| 久久全国免费视频| 久久这里只有精品99| 国产主播喷水一区二区| 成人激情在线播放| 久久精品国产亚洲一区二区| 九色精品美女在线| 精品国产户外野外| 国产91成人video| 久久影视三级福利片| 亚洲电影成人av99爱色| 亚洲国产成人爱av在线播放| 欧美黑人巨大xxx极品| 欧美一级高清免费播放| 亚洲无av在线中文字幕| 日韩小视频网址| 都市激情亚洲色图| 九九九久久久久久| 久久久精品久久| 日韩欧美主播在线| 久久久久成人精品| 日韩精品福利在线| 国产欧美久久一区二区| 91精品国产99久久久久久| 亚洲精品国产成人| 欧美人与性动交a欧美精品| 亚洲国产美女精品久久久久∴| 精品二区三区线观看| 日韩小视频网址| 亚洲黄色av网站| 亚洲成人精品视频| 这里只有精品丝袜| 91亚洲国产成人久久精品网站| 亚洲天堂免费观看| 欧美中文在线免费| 色视频www在线播放国产成人| 亚洲国产精品人人爽夜夜爽| 欧亚精品在线观看| 中文字幕日本欧美| 亚洲欧美国产一本综合首页| 欧美激情一区二区久久久| 久久久91精品国产| 日韩久久精品电影| 亚洲电影成人av99爱色| 日本a级片电影一区二区| 国产精品美乳一区二区免费| 日韩欧美aⅴ综合网站发布| 欧美特黄级在线| 高清亚洲成在人网站天堂| 日韩av中文在线|