Android使用TabLayout实现选项卡

时间:2021-11-19 18:20:29

使用TabLayout实现一个选项卡效果,之前一直自定义ViewGroup实现,今天之间用的Google框架,给我的感觉就是方便!


先上效果图:

Android使用TabLayout实现选项卡

Android使用TabLayout实现选项卡


内容区域使用的ViewPager,导航条使用的TabLayout

TabLayout在android.support.design包下,使用AS的同学记得先导入下


布局使用的线性布局:挺简单的,不多说了。

<android.support.design.widget.TabLayout
android:id="@+id/id_tl_tabs"
style="@style/myTabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff" />
<android.support.v4.view.ViewPager
android:id="@+id/id_vp_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>


给Tablayout设置了一个Style,Style中设置一下TabLayout的基本样式

<!-- 使用Style设置滚动条样式-->
<style name="myTabLayout" parent="Widget.Design.TabLayout">
<!--tab的布局-->
<item name="tabGravity">fill</item>
<!--tab下面的滚动条的颜色-->
<item name="tabIndicatorColor">#ff3355</item>
<!--将tab设置成固定-->
<item name="tabMode">fixed</item>
</style>

注意,要是直接使用属性的话,需要引入"http://schema/android.com/apk/res-auto“”这个命名空间

下面是代码部分

public class MainActivity extends FragmentActivity {

private ViewPager mVpContainer;
private TabLayout mTvTabs;
private Fragment[] mFragments = new MyFrag1[]{
new MyFrag1(1), new MyFrag1(2), new MyFrag1(3)
};
private String[] mTitles = new String[]{
"Tab1", "Tab2", "Tab3"
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}

private void initView() {
mVpContainer = (ViewPager) findViewById(R.id.id_vp_container);
mTvTabs = (TabLayout) findViewById(R.id.id_tl_tabs);

// 设置与Fragment的关联
mVpContainer.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return mFragments[position];
}

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

@Override
// 设置与TAB的关联
public CharSequence getPageTitle(int position) {
return mTitles[position];
}
});
// 设置与ViewPager的关联
mTvTabs.setupWithViewPager(mVpContainer);
}
}

Fragement

随便写了个Fragment用作测试

public class MyFrag1 extends android.support.v4.app.Fragment {
private int index;

public MyFrag1() {
super();
}

public MyFrag1(int index) {
super();
this.index = index;
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
TextView tv = new TextView(getContext());
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT
, ViewGroup.LayoutParams.WRAP_CONTENT);

tv.setText("Fragment "+index);
return tv;
}
}

好了,这样一个选项卡就完成了,是不是比自定义ViewGroup简单呢