【问题标题】:how to change SeekBar color in android? (Programmatically)如何在 android 中更改 SeekBar 颜色? (以编程方式)
【发布时间】:2017-07-26 14:00:51
【问题描述】:

我为我的应用制作了一个均衡器,但我不确定如何更改搜索栏的拇指和进度颜色。默认情况下它似乎是粉红色的,这不符合我的应用程序的审美。

 SeekBar seekBar = new SeekBar(this);

        seekBar.setId(i);

        seekBar.setLayoutParams(layoutParams);
        seekBar.setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel);

        seekBar.setProgress(mEqualizer.getBandLevel(equalizerBandIndex));
        //seekBar.setBackgroundColor(Color.DKGRAY);
        //seekBar.setDrawingCacheBackgroundColor(Color.DKGRAY);

【问题讨论】:

标签: java android seekbar


【解决方案1】:

要更改Seekbar 拇指的颜色,请在style.xml 中创建新样式

<style name="SeekBarColor"
  parent="Widget.AppCompat.SeekBar"> 
  <item name="colorAccent">@color/your_color</item> 
</style>

终于在布局中:

<SeekBar
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:theme="@style/SeekBarColor" />

要更改 Seekbar 进度颜色,请在 Java 类中使用它。

seekBar.getProgressDrawable().setColorFilter("yourcolor", PorterDuff.Mode.MULTIPLY);

这两种方法都适用于 API>16。

编辑

通过 Java 代码更改 SeekBar 拇指颜色。

 seekBar.getProgressDrawable().setColorFilter(getResources().getCo‌​lor(R.color.your_color‌​), PorterDuff.Mode.SRC_ATOP);

【讨论】:

  • 谢谢。我使用了后者,因为我以编程方式为均衡器制作了搜索栏。进度颜色发生变化,但我无法更改拇指。对此我能做些什么?
  • 答案的第一部分说明了如何更改搜索栏拇指的颜色。我添加了这段代码,因为它运行在更广泛的 API 范围内。
  • 检查 Java 代码的编辑答案以更改搜索栏拇指颜色(仅适用于 android 5 及更高版本)。
  • 在高 api 级别已弃用
【解决方案2】:

虽然使用样式是个好主意,但如果您想以编程方式分配颜色,它并不能提供很大的灵活性,我建议:

//for the progress seekBar.getProgressDrawable().setColorFilter(mThemeColor,PorterDuff.Mode.SRC_ATOP); //for the thumb handle seekBar.getThumb().setColorFilter(mThemeColor, PorterDuff.Mode.SRC_ATOP);

【讨论】:

    【解决方案3】:

    您可以像这样以编程方式更改搜索栏拇指和进度颜色:

       seekBar.getProgressDrawable().setColorFilter(Utils.getAccentColor(this), PorterDuff.Mode.SRC_IN);
       seekBar.getThumb().setColorFilter(Utils.getAccentColor(this), PorterDuff.Mode.SRC_IN);
    

    【讨论】:

      【解决方案4】:

      您可以通过代码轻松更改它,

      例如:

      seekbar.setProgressTintList(ColorStateList.valueOf(Color.parseColor(#000000)));
      

      seekbar.setProgressTintList(ColorStateList.valueOf(Color.RED));
      

      希望对以后的人有所帮助。

      【讨论】:

      • 很有帮助。
      【解决方案5】:

      你需要这样称呼你搜索栏

      SeekBar newSeek = new SeekBar(this, null, R.style.YOUR_NEW_STYLE);
      

      YOUR_NEW_STYLE 将定义您想要的 Seekbar 的颜色。

      【讨论】:

        【解决方案6】:

        试试这个:

        seekBar.getProgressDrawable().setColorFilter(getResources().getColor(R.color.mcolor), PorterDuff.Mode.MULTIPLY);
        

        【讨论】:

        • 这不会改变拇指
        【解决方案7】:

        只是一个桃色的答案

        public static void setSeekBarColor(SeekBar seekBar, int color) {
            seekBar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
            seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
        }
        

        【讨论】:

          【解决方案8】:
              //seekBar.setBackgroundColor(Color.DKGRAY);
              //seekBar.setDrawingCacheBackgroundColor(Color.DKGRAY);
          

          Android SDK 中很少有视图(ProgressBar 是另一个示例),您必须使用图形颜色过滤器更改颜色,而不是更改背景/前景源颜色。

          找到 .setColorFilter() 方法,使用一些 PorterDuff 过滤器向其中提供源颜色,例如 .Mode.MULTIPLY(取决于您最喜欢的过滤器模式),然后就可以了。

          例子:

          seekBar.setColorFilter(new PorterDuffColorFilter(srcColor,PorterDuff.Mode.MULTIPLY));
          

          【讨论】:

            猜你喜欢
            • 2021-03-31
            • 1970-01-01
            • 2017-05-16
            • 2014-11-17
            • 2015-04-02
            • 2016-07-03
            • 1970-01-01
            • 1970-01-01
            • 2020-03-06
            相关资源
            最近更新 更多