自定义ToolBar与ToolBar的封装,使ToolBar的Title居中

如图:

这里写图片描述

有关ToolBar的详细介绍:
Frist Blood
Double Kill

接下来介绍我们的ToolBar:

首先看attrs.xml文件,这里定义了几个属性:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="CustomToolBar">

        <attr name="isShowSearchView" format="boolean"/>
        <attr name="rightButtonIcon_left" format="reference"/>
        <attr name="rightButtonText_left" format="string|reference"/>
        <attr name="rightButtonIcon_right" format="reference"/>
        <attr name="rightButtonText_right" format="string|reference"/>
        <attr name="leftButtonIcon" format="reference"/>
        <attr name="leftButtonText" format="string|reference"/>

    </declare-styleable>


</resources>

接着就是custom_toolBar的布局文件:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@color/colorPrimary"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/toolbar_leftButton"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:textColor="@color/white"
        android:visibility="gone"/>
    <EditText
        android:id="@+id/toolbar_searchview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:focusable="false"
        android:drawableLeft="@mipmap/icon_search"
        style="@style/search_view"
        android:hint="请输入搜索内容"
        android:visibility="gone"
        />

    <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="@color/white"
        android:textSize="20sp"
        android:visibility="gone"/>



    <Button
        android:id="@+id/toolbar_rightButton_right"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:paddingRight="8dp"
        android:layout_marginRight="8dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:textColor="@color/white"
        android:visibility="gone"/>
    <Button
        android:id="@+id/toolbar_rightButton_left"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:paddingRight="8dp"
        android:layout_marginRight="8dp"
        android:layout_toLeftOf="@+id/toolbar_rightButton_right"
        android:layout_centerVertical="true"
        android:textColor="@color/white"
        android:visibility="gone"/>

</RelativeLayout>

接下来使我们的自定义ToolBar的封装类:

package com.zccfocusing.widget;

import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.v7.widget.TintTypedArray;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.zccfocusing.R;

/**
 * Created by android-dev on 2017/3/1.
 */

public class CustomToolBar extends Toolbar {



    private LayoutInflater mInflater;

    private View mView;
    private TextView mTextTitle;
    private EditText mSearchView;
    private Button mLeftButton;
    private Button mRightButton_Left;
    private Button mRightButton_Right;


    public CustomToolBar(Context context) {
        this(context,null);
    }

    public CustomToolBar(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomToolBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        initView();
        setContentInsetsRelative(20,20);


        if(attrs !=null) {
            final TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
                    R.styleable.CustomToolBar, defStyleAttr, 0);


            boolean isShowSearchView = a.getBoolean(R.styleable.CustomToolBar_isShowSearchView,false);

            if(isShowSearchView){

                showSearchView();
                hideTitleView();

            }


            final Drawable leftIcon = a.getDrawable(R.styleable.CustomToolBar_leftButtonIcon);
            if (leftIcon != null) {
                setLeftButtonIcon(leftIcon);
            }


            CharSequence leftButtonText = a.getText(R.styleable.CustomToolBar_leftButtonText);
            if(leftButtonText !=null){
                setLeftButtonText(leftButtonText);
            }

            final Drawable rightIconleft = a.getDrawable(R.styleable.CustomToolBar_rightButtonIcon_left);
            if (rightIconleft != null) {
                setRightButtonIconLeft(rightIconleft);
            }


            CharSequence rightButtonTextleft = a.getText(R.styleable.CustomToolBar_rightButtonText_left);
            if(rightButtonTextleft !=null){
                setRightButtonTextLeft(rightButtonTextleft);
            }

            final Drawable rightIconRight = a.getDrawable(R.styleable.CustomToolBar_rightButtonIcon_right);
            if (rightIconRight != null) {
                setRightButtonIconRight(rightIconRight);
            }


            CharSequence rightButtonTextRight = a.getText(R.styleable.CustomToolBar_rightButtonText_right);
            if(rightButtonTextRight !=null){
                setRightButtonTextRight(rightButtonTextRight);
            }

            a.recycle();
        }

    }

    private void initView() {


        if(mView == null) {

            mInflater = LayoutInflater.from(getContext());
            mView = mInflater.inflate(R.layout.custom_toolbar, null);


            mTextTitle = (TextView) mView.findViewById(R.id.toolbar_title);
            mSearchView = (EditText) mView.findViewById(R.id.toolbar_searchview);
            mRightButton_Left = (Button) mView.findViewById(R.id.toolbar_rightButton_left);
            mRightButton_Right = (Button) mView.findViewById(R.id.toolbar_rightButton_right);
            mLeftButton = (Button) mView.findViewById(R.id.toolbar_leftButton);


            LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    Gravity.CENTER_HORIZONTAL);

            addView(mView, lp);
        }



    }


    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void  setRightButtonIconLeft(Drawable icon){

        if(mRightButton_Left !=null){

            mRightButton_Left.setBackground(icon);
            mRightButton_Left.setVisibility(VISIBLE);
        }
    }

    public void  setRightButtonIconLeft(int icon){

        setRightButtonIconLeft(getResources().getDrawable(icon));
    }


    public  void setRightButtonLeftOnClickListener(OnClickListener li){

        mRightButton_Left.setOnClickListener(li);
    }

    public void setRightButtonTextLeft(CharSequence text){
        mRightButton_Left.setText(text);
        mRightButton_Left.setVisibility(VISIBLE);
    }

    public void setRightButtonTextLeft(int id){
        setRightButtonTextLeft(getResources().getString(id));
    }



    public Button getRightButton_Left(){

        return this.mRightButton_Left;
    }



    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void  setRightButtonIconRight(Drawable icon){

        if(mRightButton_Right !=null){

            mRightButton_Right.setBackground(icon);
            mRightButton_Right.setVisibility(VISIBLE);
        }
    }
    public void  setRightButtonIconRight(int icon){

        setRightButtonIconRight(getResources().getDrawable(icon));
    }

    public  void setRightButtonRightOnClickListener(OnClickListener li){

        mRightButton_Right.setOnClickListener(li);
    }

    public void setRightButtonTextRight(CharSequence text){
        mRightButton_Right.setText(text);
        mRightButton_Right.setVisibility(VISIBLE);
    }

    public void setRightButtonTextRight(int id){
        setRightButtonTextRight(getResources().getString(id));
    }



    public Button getRightButton_Right(){

        return this.mRightButton_Right;
    }


    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void  setLeftButtonIcon(Drawable icon){

        if(mLeftButton !=null){

            mLeftButton.setBackground(icon);
            mLeftButton.setVisibility(VISIBLE);
        }
    }

    public void  setLeftButtonIcon(int icon){

        setLeftButtonIcon(getResources().getDrawable(icon));
    }


    public  void setLeftButtonOnClickListener(OnClickListener li){

        mLeftButton.setOnClickListener(li);
    }

    public void setLeftButtonText(CharSequence text){
        mLeftButton.setText(text);
        mLeftButton.setVisibility(VISIBLE);
    }

    public void setLeftButtonText(int id){
        setLeftButtonText(getResources().getString(id));
    }



    public Button getLeftButton(){

        return this.mLeftButton;
    }




    @Override
    public void setTitle(int resId) {

        setTitle(getContext().getText(resId));
    }

    @Override
    public void setTitle(CharSequence title) {

        initView();
        if(mTextTitle !=null) {
            mTextTitle.setText(title);
            showTitleView();
        }

    }



    public  void showSearchView(){

        if(mSearchView !=null)
            mSearchView.setVisibility(VISIBLE);

    }


    public void hideSearchView(){
        if(mSearchView !=null)
            mSearchView.setVisibility(GONE);
    }

    public void showTitleView(){
        if(mTextTitle !=null)
            mTextTitle.setVisibility(VISIBLE);
    }


    public void hideTitleView() {
        if (mTextTitle != null)
            mTextTitle.setVisibility(GONE);

    }

}

最后在我们的布局文件里引入我们自定义的ToolBar,设置属性,就可以使用了:

<com.zccfocusing.widget.CustomToolBar
        android:id="@+id/toolbar"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:rightButtonIcon_left="@mipmap/collect"
        app:rightButtonIcon_right="@mipmap/browser_share"
        app:leftButtonIcon="@mipmap/icon_back_32px"
        app:title="@string/news"
        />
<?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"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical">

    <com.zccfocusing.widget.CustomToolBar
        android:id="@+id/toolbar"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:rightButtonIcon_left="@mipmap/collect"
        app:rightButtonIcon_right="@mipmap/browser_share"
        app:leftButtonIcon="@mipmap/icon_back_32px"
        app:title="@string/news"
        />



    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        app:tabGravity="center"
        app:tabIndicatorColor="@color/colorPrimary"
        app:tabMode="scrollable"
        app:tabSelectedTextColor="@color/colorPrimary"/>


    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

使用 toolbar不要忘了更改style的AppTheme的父类继承为NoActionBar:

style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        //设置返回按钮颜色
        <item name="colorControlNormal">@color/white</item>
    </style>

其实,如果不封装的话,也可以这样写,来实现Title居中的效果,在ToolBar内嵌套一个布局即可:

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

        <TextView
            android:id="@+id/tvTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/news_list"
            android:textSize="20sp"/>
    </android.support.v7.widget.Toolbar>

这里写图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值