現在、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>
相関関係を理解している場合、表示されている円の色はデフォルトの円(私の携帯電話では緑)から派生しています。変更する必要があります!
現在、ソースコードを変更することはできず、ライブラリ自体はスタイルをプログラムで設定する可能性を提供していません。
アプリレベルでデフォルトスタイルを変更する方法がありますか、この特定のスタイルをオーバーライドする方が良いですか?
おかげでダビデ
いくつかの試みの後、私は解決策を見つけました:
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」です。
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"/>
そして、あなたのサークルは赤い色になります!
将来の参考のために、この変更は私のために働いています:
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/>
タグに対してアクションを実行する必要はありません。