Ответ @ ianhanniballake абсолютно правильный и прост. Но мне потребовалось несколько дней, чтобы понять. Для тех, кто не понимает его ответа, здесь более подробно реализовано
<Button
android:id="@+id/btn"
style="@style/MaterialButton"
... />
<style name="MaterialButton" parent="Widget.AppCompat.Button.Colored">
<item name="android:theme">@style/Theme.MaterialButton</item>
...
</style>
<style name="Theme.MaterialButton" parent="YourTheme">
<item name="colorAccent">@color/yourAccentColor</item>
<item name="colorButtonNormal">@color/yourButtonNormalColor</item>
</style>
=== Или ===
<Button
android:id="@+id/btn"
style="@style/Widget.AppCompat.Button.Colored"
android:theme="@style/Theme.MaterialButton" />
<style name="Theme.MaterialButton" parent="YourTheme">
<item name="colorAccent">@color/yourAccentColor</item>
<item name="colorButtonNormal">@color/yourButtonNormalColor</item>
</style>
Вместо того, чтобы использовать AsyncContext.start(Runnable)
, я использовал CompletableFuture.runAsync(Runnable)
, и он работал как ожидалось.