API-21の不確定な円の進行状況バーの色を変更する方法がわかりません。 colorAccentが正しく設定されていることを確認しました。私の理解では、システムはcolorAccentから取得し、それに応じてProgressBarに色を付ける必要があります。何が間違っているのでしょうか?
app/src/main/res/layout-v21/fragment_story_comments.xml
<ProgressBar
Android:id="@+id/progress_bar"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:visibility="visible"/>
app/src/main/res/values/themes.xml
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="Android:windowNoTitle">true</item>
</style>
app/src/main/res/values/colors.xml
<color name="colorAccent">#ff5722</color>
<color name="colorPrimary">#ff5722</color>
<color name="colorPrimaryDark">#e64a19</color>
注:これは、元のリクエストに従ってAndroid 5.0(Lollipop)以上でのみ動作します。古いバージョンの場合Android ProgressBarのprogressDrawableを置き換えます。
Liamの答えを拡張して、indeterminateTintフラグを使用して、XMLでこれを機能させることができました。
どうやらそれを動作させるには、indeterminateおよびindeterminateTintModeフラグを設定する必要があります。
このモードは私にとってはちょっとした謎です。すべて試してみましたが、src_inとsrc_atopでのみ期待した結果が得られました。これらのモードが実際に何をするのかわかりませんので、これを拡張できる人がいれば感謝します。
いずれにせよ、これは動作するはずです:
<ProgressBar
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:indeterminate="true"
Android:indeterminateTint="#F00"
Android:indeterminateTintMode="src_in" />
これは、Androidの下位バージョンでも機能します。
if (progBar.getIndeterminateDrawable() != null) {
progBar.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.accent), Android.graphics.PorterDuff.Mode.SRC_IN);
}
API 21のProgressBarの色をプログラムで緑から白に次のように変更できました。
mProgressBar.getIndeterminateDrawable().setColorFilter(new LightingColorFilter(0xFF000000, 0xFFFFFF));
ただし、XMLでそれを行う方法はまだわかりませんが、これが誰かの助けになることを願っています。
テーマのアクティブ化されたコントロールの色を設定する必要があります。
<item name="colorControlActivated">@color/accent</item>
これは、Android 5.0+