我在android中创建一个简单的切换按钮,并将背景设置为drawable.
<ToggleButton
android:layout_width="wrap_content"
android:drawablePadding="0dp"
android:layout_height="wrap_content"
android:text=""
android:textSize="12sp"
android:padding="0dp"
android:id="@+id/tag_text"
android:background="@drawable/toggle_selector"/>
Run Code Online (Sandbox Code Playgroud)
toggle_selector.xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/toggle_button_off" android:state_checked="false"/>
<item android:drawable="@drawable/toggle_button_on" android:state_checked="true"/>
</selector>
Run Code Online (Sandbox Code Playgroud)
toggle_button_off和toggle_button_on具有简单的形状,可用一些颜色绘制.
这就是我将这个切换按钮膨胀到我的视图中的方式:
View child = getLayoutInflater().inflate(R.layout.tags, null);
ToggleButton tag = ((ToggleButton)child.findViewById(R.id.tag_text));
tag.setText("Testing");
tag.setTextOff("Testing");
tag.setTextOn("Testing");
flowlayout.addView(child);
Run Code Online (Sandbox Code Playgroud)
问题是在切换按钮的文本周围有太多填充,我无法通过设置摆脱它padding = "0dp".这些按钮上的文字是动态添加的,因此设置恒定的高度重量也无济于事.

在阅读了多篇博客文章和文档后,我得出结论,以下doOnSubscribe将在工作线程上执行:
Observable.just(1)
.observeOn(Schedulers.io())
.doOnSubscribe(__ -> Log.d("Testing", "Testing")) // Shouldn't this be on worker thread?
.subscribe();
Run Code Online (Sandbox Code Playgroud)
但是在调试之后,我看到doOnSubscribe在主线程上执行了.我认为doOnSubscribe它与其他运算符类似,因此在与subscribeOn和相结合时具有类似的线程行为observeOn.
我错过了什么?如何将doOnSubscribe执行移至后台线程?
我是RxJava的新手,我想我可能会忽略一些非常基本的东西.所以我创建了Observable一个像这样执行长时间运行的I/O任务.现在我想确保订阅者在Android UI线程上收到其结果:
Observable.create(new ObservableOnSubscribe<Device>() {
@Override
public void subscribe(@io.reactivex.annotations.NonNull final ObservableEmitter<Device> e) throws Exception {
//Long running task
}
}).subscribeOn(Schedulers.io())
Run Code Online (Sandbox Code Playgroud)
如您所见,我已执行了长时间运行的任务Schedulers.io().如何切换回Android UI线程?
我正在编写一个Android应用程序,该应用程序需要按以下顺序执行2个查询:
Single<List<String>> urls。现在,我将所有RequestB中的所有Single组合在一起,形成一个可观察的对象。
有点像Observable.mergedelayerror(List<Single>)。我不能这样做,因为mergedelayerror期望iterable的ObservableSource。
我知道我可以通过实现回调并使用一些丑陋的逻辑来实现这一目标,但是我真的在寻找一种解决方案,只需使用RX提供的运算符