淘先锋技术网

首页 1 2 3 4 5 6 7

TabLayout 位于 android.support.design.widget.TabLayout。

一般与 ViewPager 结合在一起使用。以前有开源库 viewpagerindicator 也可以实现,不过 TabLayout 是官方提供的。

以下使用 ViewPager + TabLayout 实现点击 tab 切换页面的效果。其中 ViewPager 中使用的是 TextView 来显示一个词,可以把 TextView 更换为 Fragment 等实现更加复杂的内容。

布局文件 activity_main.xml:

1 <?xml version="1.0" encoding="utf-8"?>

2

4 xmlns:app="http://schemas.android.com/apk/res-auto"

5 android:layout_width="match_parent"

6 android:layout_height="match_parent">

7

9 android:layout_width="match_parent"

10 android:layout_height="wrap_content"

11 android:background="@color/colorPrimary"

12 android:minHeight="?attr/actionBarSize"

13 android:theme="@style/ThemeOverlay.AppCompat.ActionBar"

14 app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

15

17 android:layout_width="match_parent"

18 android:layout_height="wrap_content"

19 android:layout_below="@+id/toolbar"/>

20

22 android:layout_width="match_parent"

23 android:layout_height="match_parent"

24 android:layout_below="@+id/tablayout"/>

25

ViewPagerAdapter.java

1 importandroid.content.Context;2 importandroid.graphics.Color;3 importandroid.support.v4.view.PagerAdapter;4 importandroid.view.Gravity;5 importandroid.view.View;6 importandroid.view.ViewGroup;7 importandroid.widget.TextView;8

9 public class ViewPagerAdapter extendsPagerAdapter {10 private static final String TAG = "ViewPagerAdapter";11 private String[] tabTitles = { "全部", "视频", "声音", "图片", "段子", "广告", "剧情"};12 privateContext mContext;13

14 publicViewPagerAdapter(Context context) {15 mContext =context;16 }17

18 @Override public intgetCount() {19 returntabTitles.length;20 }21

22 @Override public booleanisViewFromObject(View view, Object object) {23 return view ==object;24 }25

26 @Override public Object instantiateItem(ViewGroup container, intposition) {27 TextView view = newTextView(mContext);28 view.setText(tabTitles[position]);29 view.setTextColor(Color.BLACK);30 view.setTextSize(20);31 view.setGravity(Gravity.CENTER);32 container.addView(view);33 returnview;34 }35

36 @Override public void destroyItem(ViewGroup container, intposition, Object object) {37 container.removeView((TextView) object);38 }39

40 @Override public CharSequence getPageTitle(intposition) {41 returntabTitles[position];42 }43 }

MainActivity.java

1 public class MainActivity extendsAppCompatActivity {2

3 @Override protected voidonCreate(Bundle savedInstanceState) {4 super.onCreate(savedInstanceState);5 setContentView(R.layout.activity_main);6 TabLayout tabLayout =(TabLayout) findViewById(R.id.tablayout);7 ViewPager viewPager =(ViewPager) findViewById(R.id.viewpager);8 ViewPagerAdapter adapter = new ViewPagerAdapter(MainActivity.this);9 viewPager.setAdapter(adapter);10 tabLayout.setupWithViewPager(viewPager);11 }12 }

实现效果图:

4cd8f878869e4720d6339ffc8fa96a12.png

TabLayout 样式

app:tabSelectedTextColor:Tab被选中字体的颜色

app:tabTextColor:Tab未被选中字体的颜色

app:tabIndicatorColor:Tab指示器下标的颜色

app:tabIndicatorHeight="2dp"

app:tabPaddingStart="12dp"

app:tabPaddingEnd="12dp"

app:tabPaddingTop="12dp"

app:tabPaddingBottom="12dp"

app:tabPadding="12dp"

app:tabBackground="@android:color/darker_gray"

app:tabTextAppearance=""

app:tabMode:可选scrollable和fixed,默认为fixed。scrollable 适合多个 tab 的情况

当 tab 的数量不足以铺满全屏的时候,且 tabMode 为 scrollable 的时候,会出现以下情况:只需要把 tabMode 设置为 fixed 即可或者去掉这个属性,因为默认为 fixed。

678ba0ad8b504dd1acc6493793c2fcac.png

参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0731/3247.html