Toolbar的高级性能

参考:http://blog.csdn.net/guolin_blog/article/details/25466665

一、ActionProvider

作用:①、自定义Toolbar的按钮 ②、自带子菜单(子菜单还能够显示图片和文字)

效果展示:(自定义Toolbar的按钮(这里是个图片,可以是其他的View),点击后产生子菜单,子菜单的内容自定义)



①、使用Android提供的Provider(完成效果图的效果)

在menu/toolbar_menu(添加ActionProvider到视图)

1、使用Android自带的ShareProvider(顾名思义,是用来分享用的)

2、主要属性:app:actionProviderClass="控件的路径名"(属性跟ActionView差不多)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu_share"
        android:title="分享"
        app:showAsAction="ifRoom"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
</menu>
②、从代码中获取ActionProvider,并设置子菜单的item

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.toolbar_menu,menu);
        MenuItem menuItem = menu.findItem(R.id.menu_share);
        //由于本人用的还是v4的包,但是ShareActionProvider是v7的包,所以使用MenuItemCompat向下兼容
        ShareActionProvider provider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
        //通过intent设置子菜单的tiem
        provider.setShareIntent(getDefaultIntent());
        return super.onCreateOptionsMenu(menu);
    }

    private Intent getDefaultIntent(){
        Intent intent = new Intent();
        //表示搜索全部共享图片的intent
        intent.setType("image/*");
        return intent;
    }


②、自定义Provider

1、继承ActionProvider

onCreateActionView():设定按钮的显示样式。这里先为null。

2、重写onPrepareSubMenu()方法

回调时机:当点击Toolbar上的按钮,展开子菜单的时候调用。

作用:添加subItem到子菜单

3、设置hasSubMenu为true

作用:判断是否有子菜单,如果为false则点击不出子菜单

4、添加到menu/toolbar.xml中

作用:①、显示ActionProvider的位置。②、如果没设置onCreateActionView(),则可以设置android:icon=""之后按钮显示的就是图片,如果设置了onCreateActionView()那么之后按钮显示的就是View。

5、启动查看效果

public class MyActionProvider extends ActionProvider {
    public MyActionProvider(Context context) {
        super(context);
    }
    /**
     * 设置Toolbar上显示按钮的样式
     */
    @Override
    public View onCreateActionView() {
        return null;
    }

    /**
     * 当点击Toolbar上的按钮,展开子菜单的时候调用
     * @param subMenu
     */
    @Override
    public void onPrepareSubMenu(SubMenu subMenu) {
        super.onPrepareSubMenu(subMenu);
        //删除之前的子菜单
        subMenu.clear();
        //添加一个Item到子菜单
        subMenu.add("item 1")
                .setIcon(R.mipmap.ic_launcher)
                .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {

                        return true;
                    }
                });
        subMenu.add("item 2")
                .setIcon(R.mipmap.ic_launcher)
                .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        return false;
                    }
                });
    }

    /**
     * 设定是否拥有子菜单
     * @return
     */
    @Override
    public boolean hasSubMenu() {
        return true;
    }
}
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <!--添加自定义的ActionProvider,并设置按钮的图片icon-->
    <item
        android:id="@+id/menu_my_provider"
        android:title="我的Provider"
        android:icon="@mipmap/ic_launcher"
        app:showAsAction="ifRoom"
        app:actionProviderClass="com.newbiechen.usetoolbar.MyActionProvider"/>
</menu>
效果跟之前的ShareProvider差不多。

还有可以试一下天添加onCreateActionView(),来自定按钮。

二、导航Tabs

首先添加依赖包:     compile 'com.android.support:design:23.2.0'(根据自己的api 版本设定,本人最高为 api 23)
添加导航布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!--添加Toolbar-->
    <include
        layout="@layout/toolbar"/>
    <!--头部的导航栏-->
    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></android.support.design.widget.TabLayout>
    <!--主题内容,用Fragment切换-->
    <FrameLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </FrameLayout>
</LinearLayout>
然后,在代码中添加导航栏中的item
public class FirstActivity extends AppCompatActivity {
    private Toolbar mToolbar;
    private TabLayout mTabLayout;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        mTabLayout = (TabLayout) findViewById(R.id.tab_layout);
        
        setSupportActionBar(mToolbar);
        mToolbar.setTitle("FirstActivity");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        
        //通过添加Tab来添加导航栏的item
        mTabLayout.addTab(mTabLayout.newTab().setText("第一页"));
        mTabLayout.addTab(mTabLayout.newTab().setText("第二页"));
        //设定item的点击监听,这里可以用来切换Fragment
        mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                //当tab被选中的时候调用。这里用来切换Fragment
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                //当tab被释放的时候调用
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                //当tab被再次选中的时候调用
            }
        });
    }
}
关于如何切换Fragment,就不描述了。。。。
效果图:


未完成部分:

三、Toolbar+DrawerLayout+ViewPager打造界面滑动布局
四、利用Toolbar仿造微信界面

http://blog.csdn.net/guolin_blog/article/details/26365683



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值