Android:自定义 ProgressBar、Switch 颜色

一、效果图

二、代码实现

1. 圆形进度条颜色设置方法1

xml中通过indeterminateTint设置圆形进度条颜色,此方法不兼容Android21以下的版本,若需要兼容Android21以下的版本,使用方法2即可

<ProgressBar
    android:indeterminateTint="#803F51B5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

2. 圆形进度条颜色设置方法2

代码中设置:

ProgressBar circleProgress = findViewById(R.id.circle_progress);
circleProgress.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.colorPrimaryDark), PorterDuff.Mode.SRC_ATOP);

3. 水平进度条颜色设置方法1

xml中通过backgroundTint、progressTint、secondaryProgressTint设置,此方法不兼容Android21以下的版本,若需要兼容Android21以下的版本,使用方法2即可

<ProgressBar
    style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
    android:backgroundTint="@android:color/darker_gray"
    android:progressTint="@color/colorPrimary"
    android:secondaryProgressTint="#803F51B5"
    android:progress="25"
    android:secondaryProgress="50"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

4. 水平进度条颜色设置方法2

使用progressDrawable设置,新建bg_horizontal_progress.xml,放在drawable文件夹下:


<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!--3个层的顺序即为显示时的叠加顺序-->
    <!--背景色-->
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />

            <solid android:color="@android:color/darker_gray" />
        </shape>
    </item>

    <!--二级进度条的颜色-->
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

                <solid android:color="#803F51B5" />
            </shape>
        </clip>
    </item>

    <!--一级进度条的颜色,也可以直接替换成图片-->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

                <solid android:color="@color/colorPrimaryDark" />
            </shape>
        </clip>
    </item>

</layer-list>

如果只需要一级进度条颜色,把二级进度条去掉即可,即:



<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!--2个层的顺序即为显示时的叠加顺序-->
    <!--背景色-->
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />

            <solid android:color="@android:color/darker_gray" />
        </shape>
    </item>
    
    <!--一级进度条的颜色,也可以直接替换成图片-->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

                <solid android:color="@color/colorPrimaryDark" />
            </shape>
        </clip>
    </item>

</layer-list>

在布局中使用bg_horizontal_progress.xml:

<ProgressBar
    style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
    android:progressDrawable="@drawable/bg_horizontal_progress"
    android:progress="25"
    android:secondaryProgress="50"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

三、效果图完整代码

布局完整代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical">
    <TextView
        android:text="1.通过indeterminateTint设置:"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ProgressBar
        android:indeterminateTint="#803F51B5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="2.通过circleProgress.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.colorPrimaryDark), PorterDuff.Mode.SRC_ATOP)设置:"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ProgressBar
        android:id="@+id/circle_progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="3.通过backgroundTint、progressTint、secondaryProgressTint设置:"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ProgressBar
        style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
        android:backgroundTint="@android:color/darker_gray"
        android:progressTint="@color/colorPrimary"
        android:secondaryProgressTint="#803F51B5"
        android:progress="25"
        android:secondaryProgress="50"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <TextView
        android:text="4.通过progressDrawable设置:"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ProgressBar
        style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
        android:progressDrawable="@drawable/bg_horizontal_progress"
        android:progress="25"
        android:secondaryProgress="50"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

资源文件bg_horizontal_progress.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!--3个层的顺序即为显示时的叠加顺序-->
    <!--背景色-->
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />

            <solid android:color="@android:color/darker_gray" />
        </shape>
    </item>

    <!--二级进度条的颜色-->
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

                <solid android:color="#803F51B5" />
            </shape>
        </clip>
    </item>

    <!--一级进度条的颜色,也可以直接替换成图片-->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

                <solid android:color="@color/colorPrimaryDark" />
            </shape>
        </clip>
    </item>

</layer-list>

MainActivity完整代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ProgressBar circleProgress = findViewById(R.id.circle_progress);
        circleProgress.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.colorPrimaryDark), PorterDuff.Mode.SRC_ATOP);
    }
}

四、自定义 Switch 颜色

自定义 Style:

<style name="switch_style" parent="Theme.AppCompat.Light">
    <!--switch 打开时拇指按钮颜色-->
    <item name="colorControlActivated">@color/blue</item>
    <!--switch 关闭时拇指按钮颜色-->
    <item name="colorSwitchThumbNormal">@color/gray</item>
    <!--switch 关闭时轨迹的颜色,Switch 会将其设置成 30% 这个颜色-->
    <item name="android:colorForeground">@color/gray</item>
</style>

应用到 SwitchCompat 上:

android:theme="@style/switch_style"
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值