最火開源框架MVVMhabit
一. 準備工作
二. 快速上手
三. 數據綁定
四. 其他
在Android中很多重復的布局我們可以帶出截取出來寫成一個layout_toolbar.xml布局,在使用的時候通過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> {
//標題文字
public ObservableField<String> titleText = new ObservableField<>("");
//右邊文字
public ObservableField<String> rightText = new ObservableField<>("更多");
//右邊文字的觀察者
public ObservableInt rightTextVisibleObservable = new ObservableInt(View.GONE);
//右邊圖標的觀察者
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;
}
/**
* 設置標題
*
* @param text 標題文字
*/
public void setTitleText(String text) {
titleText.set(text);
}
/**
* 設置右邊文字
*
* @param text 右邊文字
*/
public void setRightText(String text) {
rightText.set(text);
}
/**
* 設置右邊文字的顯示和隱藏
*
* @param visibility
*/
public void setRightTextVisible(int visibility) {
rightTextVisibleObservable.set(visibility);
}
/**
* 設置右邊圖標的顯示和隱藏
*
* @param visibility
*/
public void setRightIconVisible(int visibility) {
rightIconVisibleObservable.set(visibility);
}
/**
* 返回按鈕的點擊事件
*/
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();
}
});
/**
* 右邊文字的點擊事件妓雾,子類可重寫
*/
protected void rightTextOnClick() {
}
/**
* 右邊圖標的點擊事件,子類可重寫
*/
protected void rightIconOnClick() {
}
}
創(chuàng)建完成
開始使用toolbar垒迂,在新的activity中引用
1械姻、xml文件引用 layout_toolbar.xml
<include
android:id="@+id/include"
layout="@layout/layout_toolbar"
binding:toolbarViewModel="@{viewModel.toolbarViewModel}" />
2、viewModel 中繼承 BaseViewModel 換成 ToolbarViewModel 就結束了机断,
設置toolbar 標題事件
1楷拳、在 ViewModel 構造方法中調用下面方法
setTitleText 設置標題
setRightText 設置右邊文字
setRightTextVisible 顯示隱藏右邊文字
setRightIconVisible 顯示隱藏右邊圖標,(右邊文字和圖標最好只顯示一個吏奸,他們是重疊的)
2欢揖、在ViewModel 中重寫方法
rightTextOnClick 右邊文字點擊事件
rightIconOnClick 右邊圖標點擊事件
以上方法都是在創(chuàng)建ToolbarViewModel.java的時候創(chuàng)建的方法,可以按照需求添加