人生处万类,知识最为贤。这篇文章主要讲述如何在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"/>
【如何在Android上更改默认的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>
如果我理解正确,所示圆圈的颜色来自默认的颜色(手机上的绿色)。我需要改变它!
现在,我无法修改源代码,库本身也不能让我以编程方式设置样式。
有一种方法可以在应用级别更改默认样式或更好地覆盖此特定样式?
谢谢戴维德
答案如果您使用的是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"/>
而你的圈子现在将呈红色!
另一答案经过多次尝试,我找到了解决方案:
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”。
另一答案对于将来的参考,这个改变对我有用:
在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/>
标记执行任何操作。推荐阅读
- Android主题定制
- 向AppTheme添加按钮样式不起作用
- 以编程方式更改Chip Widget样式不起作用 - Android
- 在Android上拉伸游戏画面以跨设备统一分辨率
- 如何在android中同步/限制某些异步http调用
- AndroidPlot - 显示垂直域标签
- Android oreo - 推送通知崩溃
- Android与其他手机的连接
- 将com.google.android.gcm.GCMBaseIntentService升级到com.google.android.gms.gcm.GoogleCloudMessaging