RxBinding 是 Jake Wharton 的一个开源库,它提供了一套在 Android 平台上的基于 RxJava的 Binding API。
RxBinding 是对 Android View 事件的扩展,它帮助我们可以对 View 事件使用 RxJava 的各种操作;
RxBinding 提供了与 RxJava 一致的回调,简化了代码;
几乎支持所有的常用控件及事件;
支持 Kotlin;
rxbinding 3 需要AndroidX
implementation ('com.jakewharton.rxbinding3:rxbinding:3.0.0') {
exclude module: 'rxjava'
exclude module: 'rxandroid'
}
rxbinding 默认会引入rxjava、rxandroid。如果项目内有自己的rx组件,需要刨包。
其他依赖,可以扩展:
implementation 'com.jakewharton.rxbinding3:rxbinding-core:3.0.0-alpha2'
implementation 'com.jakewharton.rxbinding3:rxbinding-appcompat:3.0.0-alpha2'
implementation 'com.jakewharton.rxbinding3:rxbinding-drawerlayout:3.0.0-alpha2'
implementation 'com.jakewharton.rxbinding3:rxbinding-leanback:3.0.0-alpha2'
implementation 'com.jakewharton.rxbinding3:rxbinding-recyclerview:3.0.0-alpha2'
implementation 'com.jakewharton.rxbinding3:rxbinding-slidingpanelayout:3.0.0-alpha2'
implementation 'com.jakewharton.rxbinding3:rxbinding-swiperefreshlayout:3.0.0-alpha2'
implementation 'com.jakewharton.rxbinding3:rxbinding-viewpager:3.0.0-alpha2'
implementation 'com.jakewharton.rxbinding3:rxbinding-material:3.0.0-alpha2'
rxViewGcUtil.add(
RxView.clicks(binding.btnRescue)
.throttleFirst(1, TimeUnit.SECONDS)
.subscribe(unit -> WebActivity.newRescue(getContext()))
);
因为是Rx结构,Disposable肯定处理,下面是小小的封装,集中管理Disposable
public class RxViewGcUtil {
private CompositeDisposable compositeDisposable;
public RxViewGcUtil() {
compositeDisposable = new CompositeDisposable();
}
public void add(Disposable disposable) {
if (disposable != null)
compositeDisposable.add(disposable);
}
private void delete(Disposable disposable) {
if (compositeDisposable != null) {
compositeDisposable.delete(disposable);
}
}
public void clear() {
if (compositeDisposable != null) {
compositeDisposable.clear();
compositeDisposable = null;
}
}
}
转载自:https://www.jianshu.com/p/1ad3633ef0b4
RxView.visibility(binding.input).accept(true); == bt_1.setVisibility(value ? View.VISIBLE : View.GONE);
RxView.longClicks(bt_1) == bt_1.setOnLongClickListener(new View.OnLongClickListener() {
RxView.attaches(bt_1);
RxView.attachEvents(bt_1)
RxView.detaches(bt_1);
RxView.drags(ll_demo)
.subscribe(new Consumer<DragEvent>() {
@Override
public void accept(DragEvent event) throws Exception {
//获取事件
int action = event.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
Log.d("aaa", "开始拖拽");
break;
case DragEvent.ACTION_DRAG_ENDED:
Log.d("aaa", "结束拖拽");
break;
case DragEvent.ACTION_DRAG_ENTERED:
Log.d("aaa", "拖拽的view进入监听的view时");
break;
case DragEvent.ACTION_DRAG_EXITED:
Log.d("aaa", "拖拽的view离开监听的view时");
ll_demo.setBackgroundColor(Color.parseColor("#303F9F"));
break;
case DragEvent.ACTION_DRAG_LOCATION:
float x = event.getX();
float y = event.getY();
ll_demo.setBackgroundColor(Color.GRAY);
Log.i("aaa", "拖拽的view在监听view中的位置:x =" + x + ",y=" + y);
break;
case DragEvent.ACTION_DROP:
Log.i("aaa", "释放拖拽的view");
if(event != null && event.getLocalState() != null){
View localState = (View) event.getLocalState();
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
((ViewGroup) localState.getParent()).removeView(localState);
ll_demo.addView(localState, layoutParams);
}
break;
}
}
});
RxView.draws(view_demo) == view_demo.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawLis
RxView.globalLayouts(rootview) == rootview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTre
RxView.focusChanges(et_demo) == et_demo.setOnFocusChangeListener(new View.OnFocusChange
RxView.keys(et_demo) == et_demo.setOnKeyListener(new View.OnKeyListener() {
RxView.layoutChanges(rootview)
RxView.layoutChangeEvents(rootview)
== rootview.addOnLayoutChangeListener(new View.OnLayoutChangeListener()
RxView.preDraws(view_demo, new Func
== view_demo.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreD
RxView.scrollChangeEvents(view_demo)
== view_demo.setOnScrollChangeListener(new View.OnScrollChangeLis
RxView.systemUiVisibilityChanges(rootview)
== rootview.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChange
RxView.touches(et_demo) == et_demo.setOnTouchListener(new View.OnTouchLis
例:
RxView.touches(binding.btnLock, new Function1<MotionEvent, Boolean>() {
@Override
public Boolean invoke(MotionEvent motionEvent) {
if (binding.btnEngine.isSelectedState()) {
return true;
} else {
return false;
}
}
})
.throttleFirst(1, TimeUnit.SECONDS)
.subscribe(unit -> {
AppLogUtils.i(TAG, "当 上面return true,走这里" );
});
如果不需要拦截事件,就需要把事件传递下去,touches方法默认拦截
binding.btnDefault.onTouchEvent(motionEvent);

RxTextView.beforeTextChangeEvents(et_demo)
RxTextView.textChangeEvents(et_demo)
RxTextView.afterTextChangeEvents(et_demo)
== et_demo.addTextChangedListener(new TextWatcher() {
例
rxViewGcUtil.add(RxTextView.textChanges(binding.input).subscribe(new Consumer<CharSequence>() {
@Override
public void accept(CharSequence charSequence) throws Exception {
}
}));
RxTextView.editorActions(et_demo)
RxTextView.editorActionEvents(et_demo)
== et_demo.setOnEditorActionListener(new TextView.OnEditorActionList
当viewgroup添加或者删除子view时触发
rootview.addView(view);
rootview.removeView(view);
RxViewGroup.changeEvents(rootview)
== rootview.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeL
RxToolbar.navigationClicks(toolbar_normal
== toolbar_normal.setNavigationOnClickListener(new View.OnCl
RxToolbar.itemClicks(toolbar_normal).
==toolbar_normal.setOnMenuItemClickListener(new Toolbar.OnMen
RxMenuItem.clicks(menuItem)
RxMenuItem.actionViewEvents(menuItem)
RxRadioGroup.checkedChanges(radio_g).
==radio_g.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListene
RxRadioGroup.checked(radio_g).accept(radioButton2.getId());
== radio_g.check(radioButton2.getId());
RxCompoundButton.checkedChanges(radioButton1)
== radioButton1.setOnCheckedChangeListener(new CompoundButton.OnCheckedCha
RxAutoCompleteTextView.itemClickEvents(auto_tv)
RxPopupMenu.itemClicks(popupMenu)
== popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClick
RxPopupMenu.dismisses(popupMenu).subs
==popupMenu.setOnDismissListener(new PopupMenu.OnDismissLis
//适配器Adapter数据改变
RxAdapter.dataChanges();
//绝对视图滚动事件
RxAbsListView.scrollEvents();
RxAdapterView.selectionEvents();
RxAdapterView.itemSelections();
RxAdapterView.itemClicks();
RxAdapterView.itemLongClicks();
RxAdapterView.itemLongClickEvents();
RxSeekBar.userChanges(seekBar)
RxSeekBar.systemChanges(seekBar)
RxSeekBar.changeEvents(seekBar)
RxSeekBar.changes(seekBar).
//星级滚动条进度改变事件
RxRatingBar.ratingChanges();
//星级滚动条进度改变事件
RxRatingBar.ratingChangeEvents();
queryTextChanges 输入文本监听,文本变化后的文本
RxSearchView.queryTextChanges(search_view)
queryTextChangeEvents
RxSearchView.queryTextChangeEvents(search_view).subscribe(new Consumer<SearchViewQueryTextEvent>() {
@Override
public void accept(SearchViewQueryTextEvent searchViewQueryTextEvent) throws Exception {
if(searchViewQueryTextEvent.isSubmitted()){
//提交后的处理
}else{
//输入文本监听
}
}
});
query
try {
//设置SearchView的初始值
RxSearchView.query(search_view, true).accept("asd");
} catch (Exception e) {
e.printStackTrace();
}
更新于:20210528
RxBinding
RxJava binding APIs for Android UI widgets from the platform and support libraries.
Download
Platform bindings:
implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0'
AndroidX library bindings:
implementation 'com.jakewharton.rxbinding4:rxbinding-core:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-appcompat:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-drawerlayout:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-leanback:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-recyclerview:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-slidingpanelayout:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-swiperefreshlayout:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-viewpager:4.0.0'
implementation 'com.jakewharton.rxbinding4:rxbinding-viewpager2:4.0.0'
Google ‘material’ library bindings:
implementation 'com.jakewharton.rxbinding4:rxbinding-material:4.0.0'
。
JakeWharton RxBinding:https://github.com/JakeWharton/RxBinding
ChinaCode:https://gitcode.net/mirrors/JakeWharton/rxbinding?utm_source=csdn_github_accelerator
Rx系列<第二十四篇>:RxJava之RxBinding3.0:https://www.jianshu.com/p/1ad3633ef0b4