手记

TabLayout用法和总结(一)

今天我给大家带来一篇关于TabLayout的文章,TabLayout我查看别人的文章,我发现TbLayout有些不足的地方。比如他的下划线就是只能固定的为一条直线(Indicator),如果我的下划线是为一个三角型怎么办。那这个TabLayout就无法解决了。(当然解决是可以,就是相当的麻烦)。当然在我们设计的过程中,如果下面的是直线我们就可以用TabLayout来实现。

首先我们要了解用到了那些知识点。

一、FragmentPagerAdapter
这个用来设置Tab的一般在这继承这类里面要有Tab的数量。里面还要实现三个方法。
getCount():这方法返回的一个Int值,返回的Tab的数量。
getItem(int position):每次滑动的时候,取得Tab的下标,我们取到这个下标的值就可以给我们的ViewPage,所以ViewPage应该暴露一个方法出来。
CharSequence getPageTitle(int position):这方法返回的一个字符串,意思就是Tab显示的内容。当然我们可以根据下标来可以显示Tab的信息。
package com.example.office.tablayoutandroid;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class SimpleFragmentPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 3;
private String tabTitles[] = new String[]{"时间","金钱","健康"};
private Context context;
private int [] imageResId={R.mipmap.one,R.mipmap.two,R.mipmap.three};

public SimpleFragmentPagerAdapter(FragmentManager fm,Context context) {
    super(fm);
    this.context = context;
}
@Override
public Fragment getItem(int position) {
    return PageFragment.newInstance(position+1);
}
@Override
public int getCount() {return PAGE_COUNT;
}
@Override
public CharSequence getPageTitle(int position) {return tabTitles[position];
}

}

二、Fragment
这里要重写两个方法,分别是onCreate()和onCreateView(),此时我们还要注意的是,我们还要写一个单例模式。也就是说此时要写三个方法。为什么要写这个单例模式,主要是给getItem()的一个回调,得到Tab的对应的那个下标。
onCreate():通过Bundle传过来的值,然后再通过getArguments().getInt(ARG_PAGE);得到里面的值。
onCreateView():此时我们要在这方法里面创建一个View这View就是我们ViewPage显示的页面。
package com.example.office.tablayoutandroid;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class PageFragment extends Fragment {
public static final String ARG_PAGE = "ARG_PAGE";
private int mPage;
//单例模式
public static PageFragment newInstance(int page) {
Bundle args = new Bundle();
args.putInt(ARG_PAGE, page);
PageFragment pageFragment = new PageFragment();
pageFragment.setArguments(args);
return pageFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPage = getArguments().getInt(ARG_PAGE);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_page, container, false);
TextView textView = (TextView) view;
textView.setText("Fragment #" + mPage);
return view;
}
}
三、接下来就是TabLayout与ViewPage的结合。
tabLayout.setupWithViewPager(viewPager);就可以实现TabLayout与ViewPage的结合。
package com.example.office.tablayoutandroid;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

public class ThirdActivity extends FragmentActivity {

private SimpleFragmentPagerAdapter pagerAdapter;
private ViewPager viewPager;
private TabLayout tabLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    pagerAdapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager(), this);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    viewPager.setAdapter(pagerAdapter);
    tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setTabMode(TabLayout.MODE_FIXED);

}

}

5人推荐
随时随地看视频
慕课网APP

热门评论

如果有意见不懂得欢迎提出来。谢谢

查看全部评论