如何在实际项目中高效使用Toolbar

Toolbar在项目中是使用非常频繁的组件,每一个页面都会有自己的标题,右上角自定义的按钮图标等,这里我将自己用到的方法分享出来,下面两个图

               


1、首先自定义出自己想要的Toolbar效果,一个app中toolbar的主题基本上是一致的,Toolbar的布局,其中右边的控件可以随意添别,包括ImageView,Button,TextView等等,可以随意定制出自己想要的效果,只需要在TobarManeger添加相应的操作,扩展非常方便

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="#3a3268">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="充值"
        android:textColor="#ffffff"
        android:textSize="24sp"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:layout_marginEnd="10dp"
        android:layout_marginRight="10dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="保存"
            android:textColor="#ffffff"
            android:textSize="20sp"/>

        <TextView
            android:id="@+id/submit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="提交"
            android:textColor="#ffffff"
            android:textSize="20sp"/>
    </LinearLayout>

</android.support.v7.widget.Toolbar>

使用的时候include进自己的布局

<?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">

    <include layout="@layout/include_toobar"/>

</LinearLayout>

显示如下图



2、然后我会创建一个ToolBarManager类用来管理Toolbar,里面包含了控制显示和隐藏的内容方法,内容的点击事件,设置标题等。

/**
 * [Description]
 * <p>
 * [How to use]
 * <p>
 * [Tips]
 *
 * @author Created by Jim.Huang on 2016/3/11.
 * @since 1.0.0
 */
public class ToolBarManager implements Parcelable {
    protected ToolBarManager(Parcel in) {
    }

    public static final Creator<ToolBarManager> CREATOR = new Creator<ToolBarManager>() {
        @Override
        public ToolBarManager createFromParcel(Parcel in) {
            return new ToolBarManager(in);
        }

        @Override
        public ToolBarManager[] newArray(int size) {
            return new ToolBarManager[size];
        }
    };

    private Context mContext;
    private Toolbar mToolbar;

    //标题
    private TextView mTitleTv;
    private TextView mSaveTv;
    private TextView mSubmitTv;

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
    }
    
    public ToolBarManager(Context context, Toolbar toolbar) {
        mContext = context;
        mToolbar = toolbar;
        mTitleTv = (TextView) mToolbar.findViewById(R.id.title);
        mTitleTv = (TextView) mToolbar.findViewById(R.id.save);
        mTitleTv = (TextView) mToolbar.findViewById(R.id.submit);
    }

    public ToolBarManager init() {
        //设置toolbar
        mToolbar.setTitleTextColor(mContext.getResources().getColor(white));
//        mToolbar.setBackgroundDrawable(mActionbarDrawable);
        mToolbar.setBackgroundColor(mContext.getResources().getColor(R.color.color_main));
        renew();
        return this;
    }

    public void renew() {

        //设置返回按钮
        mToolbar.setNavigationIcon(R.drawable.pub_back_ic);

        showSave(false);
        showSubmit(false);
    }

    /**
     * @param titleResId 设置标题方法
     * @return
     */
    public ToolBarManager setTitle(int titleResId) {
        return setTitle(mContext.getResources().getString(titleResId));
    }


    public ToolBarManager setTitle(@Nullable String title) {
        if (title == null) {
            mTitleTv.setVisibility(View.GONE);
        } else {
            mTitleTv.setVisibility(View.VISIBLE);
            mTitleTv.setText(title);
        }
        return this;
    }


    /**
     * @param show 控制显示或隐藏
     * @return
     */
    public ToolBarManager showSave(boolean show) {
        mSaveTv.setVisibility(show ? View.VISIBLE : View.GONE);
        return this;
    }

    public ToolBarManager showSubmit(boolean show) {
        mSubmitTv.setVisibility(show ? View.VISIBLE : View.GONE);
        return this;
    }

    /**
     * @param clickListener 点击回调
     * @return
     */
    public ToolBarManager clickSave(View.OnClickListener clickListener) {
        mSaveTv.setOnClickListener(clickListener);
        return this;
    }

    public ToolBarManager clickSubmit(View.OnClickListener clickListener) {
        mSubmitTv.setOnClickListener(clickListener);
        return this;
    }

    /**
     * @param show 控制返回按钮是否可见
     * @return
     */
    public ToolBarManager showBack(boolean show) {
        if (show) {
            mToolbar.setNavigationIcon(R.drawable.pub_back_ic);
        } else {
            mToolbar.setNavigationIcon(null);
        }
        return this;
    }
}

4、在具体页面的使用,在BaseActivity完成初始化工作,只要完成这些工作在后面的使用中就会非常简单和方便

/**
 * [Description]
 * <p/>
 * [How to use]
 * <p/>
 * [Tips]
 *
 * @author Created by Jim.Huang on 2016/3/11.
 * @since 1.0.0
 */
public  class BaseActivity extends AppCompatActivity {

    public Toolbar mToolbar;
    public ToolBarManager mToolBarManager;
    private static final int BACKSTACKENTRYCOUNT = 1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    protected void onStart() {
        super.onStart();

        //初始化ToolBarManager
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        mToolBarManager = new ToolBarManager(this, mToolbar);
        mToolBarManager.init();

        //设置返回事件
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

    }

    @Override
    public void onBackPressed() {
        if (getSupportFragmentManager().getBackStackEntryCount() == BACKSTACKENTRYCOUNT) {
            finish();
        } else {
            super.onBackPressed();
        }
    }
}


在具体Activity继承这个BaseActivity使用时可以实现链式调用。

/**
 * [Description]
 * <p/>
 * [How to use]
 * <p/>
 * [Tips]
 *
 * @author Created by Jim.Huang on 2016/3/11.
 * @since 1.0.0
 */
public class ToobarTextActivity extends BaseActivity {

//    Toolbar mToolbar;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_v1);
//        mToolbar = (Toolbar) findViewById(R.id.toolbar);
    }

    @Override
    protected void onStart() {
        super.onStart();
        mToolBarManager
                .setTitle("余额充值")
                .showSubmit(true)
                .clickSubmit(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // TODO: 2016/3/11 点击逻辑
                    }
                });
    }

}


效果如下





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值