web-dev-qa-db-ja.com

AndroidでデフォルトのProgressBar円の色を変更する方法

現在、gradle経由でインポートしたAndroidプロジェクトで外部ライブラリを使用しています。
このライブラリには、ProgressBarサークル付きの通知バーが表示されます。これは私がそのソースで見つけたコードです:

<ProgressBar
            Android:id="@+id/progress_bar"
            Android:layout_height="match_parent"
            Android:layout_marginBottom="4dp"
            Android:layout_marginTop="4dp"
            style="@style/SuperActivityToast_Progress_ProgressBar"/>

関連するスタイルはこれです:

<style name="SuperActivityToast_Progress_ProgressBar" parent="Android:Widget.Holo.ProgressBar">
    <item name="Android:layout_width">32dp</item>
    <item name="Android:layout_marginLeft">8dp</item>
</style>

相関関係を理解し​​ている場合、表示されている円の色はデフォルトの円(私の携帯電話では緑)から派生しています。変更する必要があります!

現在、ソースコードを変更することはできず、ライブラリ自体はスタイルをプログラムで設定する可能性を提供していません。

アプリレベルでデフォルトスタイルを変更する方法がありますか、この特定のスタイルをオーバーライドする方が良いですか?

おかげでダビデ

14
Davide

いくつかの試みの後、私は解決策を見つけました:

ProgressBar progBar = (ProgressBar) context.getActivity().findViewById(R.id.progress_bar);
if (progBar != null) {
    progBar.setVisibility(View.VISIBLE);
    progBar.setIndeterminate(true);
    progBar.getIndeterminateDrawable().setColorFilter(0xFFFFFFFF, Android.graphics.PorterDuff.Mode.MULTIPLY);
}

単純に、ライブラリによって作成されたプログレスバーオブジェクトの参照を取得し、その属性を変更します。 (私のアクティビティでは、「OnStart」メソッドでそれを行う必要があります。そうでない場合はnullです)最も重要な部分は、マジックを行う「setColorFilter」です。

29
Davide

AppCompatテーマを使用している場合は、accentColorを使用して円に色を付けます。

テーマとは異なる色に色付けする場合は、ThemeOverylayの使用を検討する必要があります。例えば。円の色合いをredにしたい場合は、次のことができます。

あなたのstyles.xml

<style name="RedAccent" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorAccent">#F00</item>
</style>

ProgressBarで、テーマをRedAccentに設定します。

<ProgressBar
            Android:id="@+id/progress_bar"
            Android:layout_width="32dp"
            Android:layout_height="32dp"
            Android:theme="@style/RedAccent"/>

そして、あなたのサークルは赤い色になります!

49
bond

将来の参考のために、この変更は私のために働いています:

values/styles.xmlファイルのcolorControlActivated内のAppThemeを変更する:

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Main theme colors -->
    ....
    <!-- Color for circle in progress bar -->
    <item name="colorControlActivated">#DC0808</item>
</style>

このアプローチを使用すると、xmlファイル内の<ProgressBar/>タグに対してアクションを実行する必要はありません。

5
Red M