Toolbar的简单使用和封装

因为Actionbar的扩展性比较弱,所以一般都是自定义一个titlebar,但是现在有了toolbar,完全可以解决任何头布局的显示。

简单封装后的效果是这样的:


代码:

public class MyToolbar {
    private Toolbar           mToolbar;
    private AppCompatActivity mActivity;
    private ActionBar         mActionBar;
    private RelativeLayout    rlCustom;

    public MyToolbar(Toolbar mToolbar, final AppCompatActivity mActivity) {
        this.mToolbar = mToolbar;
        this.mActivity = mActivity;
        rlCustom = (RelativeLayout) mToolbar.findViewById(R.id.rlCustom);
        //支持ActionBar
        mActivity.setSupportActionBar(mToolbar);
        mActionBar = mActivity.getSupportActionBar();
        mActionBar.setDisplayHomeAsUpEnabled(true);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mActivity.finish();
            }
        });
    }

    //设置主标题
    public MyToolbar setTitle(String title) {
        mActionBar.setTitle(title);
        return MyToolbar.this;
    }

    //设置副标题
    public MyToolbar setSubTitle(String subTitle) {
        mActionBar.setSubtitle(subTitle);
        return MyToolbar.this;
    }

    public MyToolbar setTitle(int resId) {
        mActionBar.setTitle(resId);
        return MyToolbar.this;
    }

    public MyToolbar setSubTitle(int resId) {
        mActionBar.setSubtitle(resId);
        return MyToolbar.this;
    }

    //设置导航栏图标的点击监听
    public MyToolbar setNavigationOnClickListener(View.OnClickListener listener) {
        mToolbar.setOnClickListener(listener);

        return MyToolbar.this;
    }

    //设置用于工具栏导航按钮的图标
    public MyToolbar setNavigationIcon(int resId) {
        mToolbar.setNavigationIcon(resId);
        return MyToolbar.this;
    }

    // 给左上角图标的左边加上一个返回的图标
    public MyToolbar setDisplayHomeAsUpEnabled(boolean isShow) {
        mActionBar.setDisplayHomeAsUpEnabled(isShow);
        return MyToolbar.this;
    }

    //自定义toolbar的布局
    public MyToolbar setCustomView(View view) {
        rlCustom.removeAllViews();
        rlCustom.addView(view);
        return MyToolbar.this;
    }

    //自定义toolbar的布局
    public MyToolbar setCustomView(int resId) {
        View view = mActivity.getLayoutInflater().inflate(resId, null);
        rlCustom.removeAllViews();
        rlCustom.addView(view);
        return MyToolbar.this;
    }
}
BaseActivity

public abstract class BaseActivity extends AppCompatActivity {

    private RelativeLayout rlContent;
    private Toolbar        toolBar;
    private MyToolbar      mMyToolbar;

    @Override
    public void startActivity(Intent intent) {
        super.startActivity(intent);
        overridePendingTransition(R.anim.anim_in_right_left, R.anim.anim_out_right_left);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base_layout);
        initView();
        View view = getLayoutInflater().inflate(getLayoutId(), null, false);
        rlContent.addView(view);
        mMyToolbar = new MyToolbar(toolBar, this);
    }

    private void initView() {
        rlContent = (RelativeLayout) findViewById(R.id.rlContent);
        toolBar = (Toolbar) findViewById(R.id.toolBar);
    }

    public abstract int getLayoutId();

    public MyToolbar getToolbar() {
        if (null == mMyToolbar) {
            mMyToolbar = new MyToolbar(toolBar, this);
        }
        return mMyToolbar;
    }

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.anim_in_left_right, R.anim.anim_out_left_right);
    }
}

MainAncitity

public class MainActivity extends BaseActivity {
    private MyToolbar mMyToolbar;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mMyToolbar = getToolbar();
        mMyToolbar.setTitle("主标题").setSubTitle("副标题");
    }

    @Override
    public int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

    public void first(View view) {
        startActivity(new Intent(this, SecondActivity.class));
    }
}
SecondActivity

public class SecondActivity extends BaseActivity {
    private MyToolbar mMyToolbar;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mMyToolbar = getToolbar();
        mMyToolbar.setCustomView(R.layout.layout_custom_toolbar);
    }

    @Override
    public int getLayoutId() {
        return R.layout.activity_second;
    }
}
BaseActivity布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolBar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        >

        <RelativeLayout
            android:id="@+id/rlCustom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            >
        </RelativeLayout>
    </android.support.v7.widget.Toolbar>

    <RelativeLayout
        android:id="@+id/rlContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </RelativeLayout>

</LinearLayout>

menu布局:

<?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/action_search"
          android:title="搜索"
          android:orderInCategory="80"
          android:icon="@android:drawable/ic_menu_search"
          app:showAsAction="ifRoom" />

    <item android:id="@+id/action_share"
          android:title="分享"
          android:orderInCategory="90"
          android:icon="@android:drawable/ic_menu_share"
          app:showAsAction="ifRoom" />

    <item android:id="@+id/action_settings"
          android:title="设置"
          android:orderInCategory="100"
          app:showAsAction="never"/>
</menu>
anim_in_right_left:  
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="300">
    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0"/>
</set>
anim_out_right_left: 
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="300">
    <translate
        android:fromXDelta="0"
        android:toXDelta="-100%p"/>
</set>
anim_in_left_right: 
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="300">
    <translate
        android:fromXDelta="-100%p"
        android:toXDelta="0"/>
</set>
anim_out_left_right: 
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="300">
    <translate
        android:fromXDelta="0"
        android:toXDelta="100%p"/>
</set>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunnyRivers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值