toolbar頭部(相同的頭部使用include引用)

最火開(kāi)源框架MVVMhabit
一. 準(zhǔn)備工作
二. 快速上手

三. 數(shù)據(jù)綁定

  1. TextView綁定
  2. onClick綁定
  3. ImageView綁定
  4. ListView綁定
  5. RecyclerView綁定

四. 其他

  1. toolbar頭部標(biāo)題
  2. 底部tabBar第三方按鈕

在Android中很多重復(fù)的布局我們可以帶出截取出來(lái)寫成一個(gè)layout_toolbar.xml布局,在使用的時(shí)候通過(guò)include引入布局

創(chuàng)建toolbar

1、新建xml布局layout_toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:binding="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="toolbarViewModel"
            type="com.makuan.template.base.ToolbarViewModel" />
    </data>

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:background="@color/white"
        binding:contentInsetStart="0dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/iv_back"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:background="?selectableItemBackground"
                android:padding="12dp"
                android:src="@mipmap/back"
                binding:onClickCommand="@{toolbarViewModel.backOnClick}" />

            <TextView
                android:id="@+id/tv_title"
                style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:ellipsize="end"
                android:gravity="center"
                android:maxEms="12"
                android:singleLine="true"
                android:text="@{toolbarViewModel.titleText}"
                android:textColor="@color/textColor"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/tv_right_text"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="?selectableItemBackground"
                android:gravity="center"
                android:padding="12dp"
                android:text="@{toolbarViewModel.rightText}"
                android:textColor="@color/textColor"
                android:textSize="18sp"
                android:visibility="@{toolbarViewModel.rightTextVisibleObservable}"
                binding:onClickCommand="@{toolbarViewModel.rightTextOnClick}" />

            <ImageView
                android:id="@+id/iv_right_icon"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="?selectableItemBackground"
                android:gravity="center"
                android:padding="12dp"
                android:src="@mipmap/toolbar_more"
                android:visibility="@{toolbarViewModel.rightIconVisibleObservable}"
                binding:onClickCommand="@{toolbarViewModel.rightIconOnClick}" />

            <View
                style="@style/ViewLineStyle"
                android:layout_alignParentBottom="true" />
        </RelativeLayout>
    </android.support.v7.widget.Toolbar>
</layout>

2、創(chuàng)建toolbarViewModel.java

public class ToolbarViewModel<M extends BaseModel> extends BaseViewModel<M> {
    //標(biāo)題文字
    public ObservableField<String> titleText = new ObservableField<>("");
    //右邊文字
    public ObservableField<String> rightText = new ObservableField<>("更多");
    //右邊文字的觀察者
    public ObservableInt rightTextVisibleObservable = new ObservableInt(View.GONE);
    //右邊圖標(biāo)的觀察者
    public ObservableInt rightIconVisibleObservable = new ObservableInt(View.GONE);
    //兼容databinding,去泛型化
    public ToolbarViewModel toolbarViewModel;

    public ToolbarViewModel(@NonNull Application application) {
        this(application, null);
    }

    public ToolbarViewModel(@NonNull Application application, M model) {
        super(application, model);
        toolbarViewModel = this;
    }

    /**
     * 設(shè)置標(biāo)題
     *
     * @param text 標(biāo)題文字
     */
    public void setTitleText(String text) {
        titleText.set(text);
    }

    /**
     * 設(shè)置右邊文字
     *
     * @param text 右邊文字
     */
    public void setRightText(String text) {
        rightText.set(text);
    }

    /**
     * 設(shè)置右邊文字的顯示和隱藏
     *
     * @param visibility
     */
    public void setRightTextVisible(int visibility) {
        rightTextVisibleObservable.set(visibility);
    }

    /**
     * 設(shè)置右邊圖標(biāo)的顯示和隱藏
     *
     * @param visibility
     */
    public void setRightIconVisible(int visibility) {
        rightIconVisibleObservable.set(visibility);
    }

    /**
     * 返回按鈕的點(diǎn)擊事件
     */
    public final BindingCommand backOnClick = new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            finish();
        }
    });

    public BindingCommand rightTextOnClick = new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            rightTextOnClick();
        }
    });
    public BindingCommand rightIconOnClick = new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            rightIconOnClick();
        }
    });

    /**
     * 右邊文字的點(diǎn)擊事件,子類可重寫
     */
    protected void rightTextOnClick() {
    }

    /**
     * 右邊圖標(biāo)的點(diǎn)擊事件,子類可重寫
     */
    protected void rightIconOnClick() {
    }
}

創(chuàng)建完成

開(kāi)始使用toolbar,在新的activity中引用

1、xml文件引用 layout_toolbar.xml

<include
    android:id="@+id/include"
    layout="@layout/layout_toolbar"
    binding:toolbarViewModel="@{viewModel.toolbarViewModel}" />

2、viewModel 中繼承 BaseViewModel 換成 ToolbarViewModel 就結(jié)束了,

設(shè)置toolbar 標(biāo)題事件

1、在 ViewModel 構(gòu)造方法中調(diào)用下面方法

setTitleText 設(shè)置標(biāo)題
setRightText 設(shè)置右邊文字
setRightTextVisible 顯示隱藏右邊文字
setRightIconVisible 顯示隱藏右邊圖標(biāo),(右邊文字和圖標(biāo)最好只顯示一個(gè),他們是重疊的)

2、在ViewModel 中重寫方法

rightTextOnClick 右邊文字點(diǎn)擊事件
rightIconOnClick 右邊圖標(biāo)點(diǎn)擊事件

以上方法都是在創(chuàng)建ToolbarViewModel.java的時(shí)候創(chuàng)建的方法,可以按照需求添加

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容