ToolBar的使用


效果图:上面

实现步骤:

1.首先定义一个toolbar的layout布局,这个布局中含有editText 和TextView,Button,对应上面的效果图

2.

<?xml version="1.0" encoding="utf-8"?>
<!--这个布局是toolbar的子布局-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <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:drawableLeft="@mipmap/icon_search"
        style="@style/search_view"
        android:hint="请输入搜索内容"


        android:visibility="gone"></EditText>


    <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"
        android:layout_width="20sp"
        android:layout_height="20sp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:textColor="@color/white"
        android:visibility="gone"
        style="@android:style/Widget.Material.Toolbar.Button.Navigation"
         />


</RelativeLayout>


editText的样式文件:

1.style中的文件

  <!--editText的样式-->
    <style name="search_view">
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">@color/white</item>
        <item name="android:textColorHint">@color/white</item>


        <item name="android:background">@drawable/selector_search_view</item>
        <item name="android:paddingTop">6dp</item>
        <item name="android:paddingBottom">6dp</item>
        <item name="android:paddingLeft">4dp</item>


        <item name="android:singleLine">true</item>
    </style>

2.drabable中的selector_search_view文件:

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


    <selector
        xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="false" >
            <shape android:shape="rectangle">
                <corners android:radius="8dp" />
                <solid android:color="#eb4f38" />
            </shape>
        </item>
        <item android:state_pressed="true">
            <shape android:shape="rectangle">
                <corners android:radius="8dp" />
                <solid android:color="#eb4f38" />
            </shape>
        </item>
        <item>
            <shape android:shape="rectangle">
                <corners android:radius="8dp" />
                <solid android:color="#D82917" />
            </shape>
        </item>
    </selector>


2.在widget中新建ByToolBar文件,它就死自定义的ToolBar只不过是以类的形式,显示出来,代码后面上


3.在你需要显示这个toolbar的布局里面加上ByToolBar这个类,与此同时你先要在values中新建一个attrs的文件夹,在里面自定义几个需要使用的属性

attrs的代码;


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="ByToolBar">
        <attr name="rightButtonIcon" format="reference"/>
        <attr name="isShowSearchView" format="boolean"/>
    </declare-styleable>
</resources>
<!--format="refreence"这个是来规定取值范围-->

<!--refrence这个是为了可以调用自定义的button的图片-->
    <!--boolran这个是为了空时editText和TextView,button的可见性切换-->


layout布局:

<!--backgrounf在style中修改背景颜色,minheight是最小高度-->

<!-- app:title=""这个设置toolbar上的textview的文字,        app:navigationIcon="@mipmap/icon_back_32px"这个是设置最左边的图案,可以不自定义-->

<!-- -    app:rightButtonIcon="@mipmap/icon_back_32px"

 app:isShowSearchView="true"

这两个就是在ByToolBar中自定义的设置控件的可见性切换,和右边button的可见性->
    <zuo.com.ui.widget.ByToolBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        app:title="@string/home"
        app:rightButtonIcon="@mipmap/icon_back_32px"
        app:navigationIcon="@mipmap/icon_back_32px"
        app:isShowSearchView="true"
   >



最后是ByToolBar的代码:

package zuo.com.ui.widget;


import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
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 zuo.com.ui.R;


/**
 * Created by Administrator on 2016/10/7.
 */
public class ByToolBar extends Toolbar {


    private LayoutInflater layoutInflater;


    private TextView mTextTitle;
    private EditText mSearchView;
    private Button mRightButton;


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


    public ByToolBar(Context context, @Nullable AttributeSet attrs) {
        this(context,attrs,0);
    }
//第三个构造函数,调用第二个构造函数,第二个构造函数调用第一个构造函数
    public ByToolBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);


        initView();
        //设置editText的左右边距
        setContentInsetsRelative(10,10);


        //这个实际上就是复制自定义的button的图案
        if (attrs != null) {
            final TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
                    R.styleable.ByToolBar, defStyleAttr, 0);




            final Drawable rightIcon = a.getDrawable(R.styleable.ByToolBar_rightButtonIcon);
            if (rightIcon != null) {
                //setNavigationIcon(navIcon);
                setRightButtonIcon(rightIcon);
            }


            /**
             * 这个是设置editText控件,他不能与textview和button同时出现,所以出现了就要调用下面的方法,设置textview的可见性
             */
            boolean isShowSearchView = a.getBoolean(R.styleable.ByToolBar_isShowSearchView,false);


            if(isShowSearchView){


                showSearchView();
                 hideTitleView();
                hideRightButton();

         //设置最左边控件的可见性
         setNavigationIcon(null);





            }
            a.recycle();//关闭a
        }
    }


    /**
     *设置右边button 的值
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void  setRightButtonIcon(Drawable icon){


        if(mRightButton !=null){


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


    /**
     *右边button的点击事件
     */
    public  void setRightButtonOnClickListener(OnClickListener li){


        mRightButton.setOnClickListener(li);
    }


    /**
     * 这个函数实际上就是初始化tool_bar中三个控件的实例对象,然后将他们放在一个LinearLayout不居中,实现ToolBar的布局
     */
    private void initView() {
        if(mTextTitle==null) {
            layoutInflater = LayoutInflater.from(getContext());
            View view = layoutInflater.inflate(R.layout.tool_bar, null);


            mTextTitle = (TextView) view.findViewById(R.id.toolbar_title);
            mSearchView = (EditText) view.findViewById(R.id.toolbar_searchview);
            mRightButton = (Button) view.findViewById(R.id.toolbar_rightButton);


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


    }


    /**
     *下面的几个getset函数实际上就是设置tool_bar中三个控件的可见性
     */
    @Override
    public void setTitle(@StringRes int resId) {
        super.setTitle(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);


    }


    public void hideRightButton(){
        if(mRightButton!=null){
            mRightButton.setVisibility(GONE);
        }
    }


    }







2017-04-07果冻肉效果的Toolbar支持Android SDK 16 集成:Add to your root build.gradle:allprojects { repositories {   ...   maven { url "https://jitpack.io" } } }Add the dependency:dependencies {   compile 'com.github.yalantis:jellytoolbar:v1.0'}使用<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical">     <com.yalantis.jellytoolbar.widget.JellyToolbar         android:id="@ id/toolbar"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:background="@color/colorPrimary"         android:paddingLeft="@dimen/activity_horizontal_margin"         android:paddingStart="@dimen/activity_horizontal_margin"         app:cancelIcon="@drawable/ic_close"         app:endColor="@color/colorEnd"         app:icon="@drawable/ic_search"         app:startColor="@color/colorStart"         app:title="@string/str_news_feed"         app:titleTextColor="@android:color/white" /> </LinearLayout>public class MainActivity extends AppCompatActivity {     private JellyToolbar toolbar;     private AppCompatEditText editText;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         toolbar = (JellyToolbar) findViewById(R.id.toolbar);         toolbar.getToolbar().setNavigationIcon(R.drawable.ic_menu);         toolbar.setJellyListener(jellyListener);         editText = (AppCompatEditText) LayoutInflater.from(this).inflate(R.layout.edit_text, null);         editText.setBackgroundResource(R.color.colorTransparent);         toolbar.setContentView(editText);     }     private JellyListener jellyListener = new JellyListener() {         @Override         public void onCancelIconClicked() {             if (TextUtils.isEmpty(editText.getText())) {                 toolbar.collapse();             } else {                 editText.getText().clear();             }         }     }; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值