ToolBar的使用

1.在我们需要顶部导航栏的布局文件当中添加Toolbar,并且配置一些常用的属性(使用自定义属性的时候需要注意把命名空间“app”添加到根节点)。
       这里只列出一些常用的属性,比如最小高度,返回按钮的图标,背景等等。这里需要注意的是,属性值中的“ ? ”表示对 Android 系统的主题样式进行重用。意思是如果我们改变了主题样式中的 colorPrimary 属性的话, Toolbar 的背景颜色也会随之改变,因此提醒我们去主题样式中进行一些配置。

<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="?actionBarSize"
        app:navigationIcon="@mipmap/arrow_left"
        app:title="标题"/>

2.styles.xml文件中进行一些常用的配置。由于我们使用的是
AppCompatActivity,因此必须使用AppCompat的相关主题,笔者这里使用亮色调的没有ActionBar的主题,注意需要在清单文件当中去使用自己定义的主题。为了完全去掉ActionBar,需要把windowActionBarwindowNoTitle以及加上android声明的也写上,确保把系统自带的以及第三方兼容包的ActionBar都彻底去掉。

   <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/red</item>
        <item name="colorPrimaryDark">@color/green</item>
        <item name="colorAccent">@color/blue</item>
        <item name="android:textColorPrimary">@color/white</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>


colorPrimaryDark是我们手机最顶端的状态栏的背景颜色(改变它需要Android5.0以及以上的手机支持才行)。
colorPrimary是指导航栏的颜色。
colorAccent是指我们常用控件比如Button等的颜色。
textColorPrimary是指我们导航栏中标题的颜色。
windowBackground是指我们窗体的默认颜色。
navigationBarColor是指Android手机中虚拟按键的背景颜色。
package com.example.jingbiaozhen.customdraggridview.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.jingbiaozhen.customdraggridview.R;

/*
* Created by jingbiaozhen on 2017/12/16.
* 自定义ToolBar,分析各种属性
**/

public class CustomToolbar extends Toolbar
{

    private String title;

    private View mChildView;

    private TextView mTitleTv;

    private EditText mSearchView;

    private boolean isShowSearchView;

    private ImageView mLeftIv;

    private ImageView mRightIv;

    private Drawable rightDrawable;

    private Drawable leftDrawable;

    private OnLeftButtonClickListener mLeftButtonClickListener;

    private OnRightButtonClickListener mRightButtonClickListener;

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

    public CustomToolbar(Context context, @Nullable AttributeSet attrs)
    {
        this(context, attrs, 0);
    }

    public CustomToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr)
    {
        super(context, attrs, defStyleAttr);
        initFromAttributes(context, attrs, defStyleAttr);
        initView();
        initListener();

    }

    private void initListener()
    {
        mLeftIv.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                mLeftButtonClickListener.click();

            }
        });
        mRightIv.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                mRightButtonClickListener.click();

            }
        });

    }

    public interface OnLeftButtonClickListener
    {
        void click();
    }

    public interface OnRightButtonClickListener
    {
        void click();
    }

    public void setOnLeftButtonClickListener(OnLeftButtonClickListener listener)
    {
        mLeftButtonClickListener = listener;
    }

    public void setOnRightButtonClickListener(OnRightButtonClickListener listener)
    {
        mRightButtonClickListener = listener;
    }

    private void initView()
    {
        if (mChildView == null)
        {
            mChildView = View.inflate(getContext(), R.layout.view_custom_toolbar, null);
            mLeftIv = (ImageView) mChildView.findViewById(R.id.toolbar_leftButton);
            mRightIv = (ImageView) mChildView.findViewById(R.id.toolbar_rightButton);
            mTitleTv = (TextView) mChildView.findViewById(R.id.toolbar_title);
            mSearchView = (EditText) mChildView.findViewById(R.id.toolbar_searchview);
            addView(mChildView);
            showTitle(!isShowSearchView);
            showSearchView(isShowSearchView);
            if (leftDrawable != null)
            {
                mLeftIv.setImageDrawable(leftDrawable);
            }

            if (rightDrawable != null)
            {
                mRightIv.setImageDrawable(rightDrawable);
            }

        }

    }

    public void showTitle(boolean isShowTitle)
    {
        if (isShowTitle)
        {
            mTitleTv.setVisibility(VISIBLE);
            if (!TextUtils.isEmpty(title))
            {
                mTitleTv.setText(title);
            }
        }
        else
        {
            mTitleTv.setVisibility(GONE);
        }

    }

    public void showSearchView(boolean isShowSearchView)
    {
        if (isShowSearchView)
        {
            mSearchView.setVisibility(VISIBLE);
        }
        else
        {
            mSearchView.setVisibility(GONE);
        }
    }

    public void setLeftButtonIconDrawable(Drawable d)
    {
        mLeftIv.setImageDrawable(d);
    }

    public void setRightButtonIconDrawable(Drawable d)
    {
        mRightIv.setImageDrawable(d);
    }

    private void initFromAttributes(Context context, AttributeSet attrs, int defStyleAttr)
    {
        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomToolbar, defStyleAttr, 0);
        isShowSearchView = a.getBoolean(R.styleable.CustomToolbar_showSearchView, false);
        rightDrawable = a.getDrawable(R.styleable.CustomToolbar_rightButtonIcon);
        leftDrawable = a.getDrawable(R.styleable.CustomToolbar_leftButtonIcon);
        title = a.getString(R.styleable.CustomToolbar_MyTitle);

        a.recycle();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值