Toolbar是android L引入的一个新控件,可以理解为action bar的第二代:提供了action bar类似的功能,但是更灵活。不像actionbar那么固定,Toolbar更像是一般的View元素,可以被放置在view树体系的任意位置,可以应用动画,可以跟着scrollView滚动,可以与布局中的其他view交互。当然,你还可以用Toolbar替换掉actionbar,只需调用Activity.setActionBar()。为了兼容更多的设备一般我们都是通过AppCompat 中的 android.support.v7.widget.Toolbar来使用Toolbar。
(1)将Toolbar
当作actionbar来使用。这种情况一般发生在你想利用actionbar现有的一些功能(比如能够显示菜单中的操作项,响应菜单点击事件,使用ActionBarDrawerToggle
等),但是又想获得比actionbar更多的控制权限。
(2)将Toolbar当作一个独立的控件来使用,这种方式又名Standalone。
使用toolbar之前需要将SlidingTabLayout.java和SlidingTabStrip.java这两个类导入到自己自定义的项目的包下,导入成功以后就开始写代码了,首先要在布局文件中引入SlidingTabLayout类
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent" >
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize">
<com.qianfeng.android.toolbar.tab.SlidingTabLayout
android:id="@+id/sliding_tab_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.qianfeng.android.toolbar.tab.SlidingTabLayout>
</android.support.v7.widget.Toolbar>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
></android.support.v4.view.ViewPager>
</LinearLayout>
接下来就要对布局的资源进行配置需要适配器,适配器的配置代码如下所示:
public class MyViewPagerAdapter extends PagerAdapter {
private List<LinearLayout> linearLayoutList;
private List<String> string;
public MyViewPagerAdapter(List<LinearLayout> linearLayoutList, List<String> string) {
this.linearLayoutList = linearLayoutList;
this.string = string;
}
@Override
public int getCount() {
return linearLayoutList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(linearLayoutList.get(position));
return linearLayoutList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(linearLayoutList.get(position));
}
@Override
public CharSequence getPageTitle(int position) {
return string.get(position);
}
}
然后对MainActivity的代码进行编写,代码里都有具体的步骤的注释,我就不再写了。
public class MainActivity extends AppCompatActivity {
private Toolbar toolBar;
private ViewPager viewPager;
private ArrayList<LinearLayout> linearLayoutList;
private int[] imageIds={R.drawable.a,R.drawable.b,R.drawable.c};
private ArrayList<String> list;
private MyViewPagerAdapter adapter;
private SlidingTabLayout tab;
private int[] colors={Color.BLUE,Color.YELLOW,Color.GREEN};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化toolbar
initToolBar();
//初始化Viewpager
initViewPager();
//初始化每一页的视图
initPage();
//初始化标题值
initTitles();
//设置适配器
initAdapter();
//绑定适配器
bindAdapter();
//设置监听器
setListener();
//初始化SlidingTab
initSlidingTab();
}
private void initSlidingTab() {
tab=(SlidingTabLayout)findViewById(R.id.sliding_tab_layout);
tab.setCustomTabView(R.layout.tab,0);
tab.setViewPager(viewPager);
tab.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return colors[position];
}
@Override
public int getDividerColor(int position) {
return colors[position];
}
});
}
private void setListener() {
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
/**
* 表示滑动当前页,但是还没有到达下一页
* @param position 表示当前页的位置
* @param positionOffset 表示滑动的位移量(偏移量),数值范围为[0,1)
* @param positionOffsetPixels 滑动的偏移量,用像素值来表示
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
/**
* 表示选择的当前页
* @param position 当前页的位置
*/
@Override
public void onPageSelected(int position) {
}
/**
* 当前页的滑动状态改变时回调的方法
* @param state 当前的状态
* SCROLL_STATE_DRAGGING 表示滑动状态
* SCROLL_STATE_IDLE 表示静止状态
* SCROLL_STATE_SETTLING 表示停止状态
*/
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void bindAdapter() {
viewPager.setAdapter(adapter);
}
private void initAdapter() {
adapter=new MyViewPagerAdapter(linearLayoutList,list);
}
private void initTitles() {
list=new ArrayList<String>();
list.add("第一个");
list.add("第二个");
list.add("第三个");
}
private void initPage() {
linearLayoutList=new ArrayList<LinearLayout>();
for(int i=0;i<3;i++){
LinearLayout linearLayout=new LinearLayout(this);
linearLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
linearLayout.setBackgroundResource(imageIds[i]);
linearLayoutList.add(linearLayout);
}
}
private void initViewPager() {
viewPager=(ViewPager)findViewById(R.id.viewpager);
}
private void initToolBar() {
toolBar=(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolBar);
}
}
最后运行的效果图如下所示: