天天看点

Android ToolBar详解

     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);
    }
}
           

  最后运行的效果图如下所示:

Android ToolBar详解