تعطيل ADBLOCK

يمنع ADBlock بعض المحتوى على الموقع

ADBlock errore

كيفية تغيير لون التقدم شريط التقدم في الروبوت

StackOverflow https://stackoverflow.com/questions/2020882

سؤال

وأنا باستخدام شريط التقدم الأفقي في تطبيق يعمل بنظام التشغيل Android، وأريد أن أغير لون تقدمها (والذي هو الأصفر افتراضيا). كيف يمكنني أن أفعل ذلك باستخدام code (لا XML)؟

المحلول

وأنا آسف أنها ليست الحل، ولكن ما يقود شرط تحديد ذلك من التعليمات البرمجية؟ ويجب .setProgressDrawable تعمل إذا هو تعريفه بشكل صحيح

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@android:id/background">
    <shape>
        <corners android:radius="5dip" />
        <gradient
                android:startColor="#ff9d9e9d"
                android:centerColor="#ff5a5d5a"
                android:centerY="0.75"
                android:endColor="#ff747674"
                android:angle="270"
        />
    </shape>
</item>

<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <gradient
                    android:startColor="#80ffd300"
                    android:centerColor="#80ffb600"
                    android:centerY="0.75"
                    android:endColor="#a0ffcb00"
                    android:angle="270"
            />
        </shape>
    </clip>
</item>

<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners
                android:radius="5dip" />
            <gradient
                android:startColor="@color/progress_start"
                android:endColor="@color/progress_end"
                android:angle="270" 
            />
        </shape>
    </clip>
</item>

</layer-list>

نصائح أخرى

لوProgressBar الأفقي، يمكنك استخدام ColorFilter، أيضا، مثل هذا:

progressBar.getProgressDrawable().setColorFilter(
    Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);

<قوية> ملاحظة: هذا يعدل ظهور جميع أشرطة التقدم في التطبيق الخاص بك. لتعديل فقط شريط التقدم محددة واحدة، قيام بذلك:

Drawable progressDrawable = progressBar.getProgressDrawable().mutate();
progressDrawable.setColorFilter(Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);
progressBar.setProgressDrawable(progressDrawable);

إذا progressBar هو غير محدد ثم استخدام getIndeterminateDrawable() بدلا من getProgressDrawable().

ومنذ المصاصة (API 21)، يمكنك تحديد لون التقدم:

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

وهذا ليس برمجيا ولكن أعتقد أنه يمكن أن يساعد الكثير من الناس على أي حال.
حاولت كان كثيرا وأكثر طريقة فعالة لإضافة هذه الخطوط إلى بلدي ProgressBar في ملف. xml:

            android:indeterminate="true"
            android:indeterminateTintMode="src_atop"
            android:indeterminateTint="@color/secondary"

وحتى في نهاية المطاف هذا الرمز فعل ذلك بالنسبة لي:

<ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleLarge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_marginTop="50dp"
            android:layout_marginBottom="50dp"
            android:visibility="visible"
            android:indeterminate="true"
            android:indeterminateTintMode="src_atop"
            android:indeterminateTint="@color/secondary">

ويعمل هذا الحل ل <القوي> API 21 +

لبلدي progressbar غير محدد (الدوار) أنا فقط تعيين مرشح اللون على drawable. يعمل كبيرة وسطر واحد فقط.

مثال حيث وضع اللون إلى الأحمر:

ProgressBar spinner = new android.widget.ProgressBar(
                context,
                null,
                android.R.attr.progressBarStyle);

spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000, android.graphics.PorterDuff.Mode.MULTIPLY);

وهذا هو السؤال القديم، ولكن لا يذكر باستخدام موضوع هنا. إذا موضوع الافتراضي يستخدم AppCompat، سوف يكون لون ProgressBar الخاص بك colorAccent عرفتها.

وتغيير colorAccent وأيضا تغيير لون ProgressBar الخاص بك، ولكن هناك تغييرات يعكس أيضا في أماكن متعددة. لذا، إذا كنت ترغب في لون مختلف تماما لPregressBar محددة يمكنك أن تفعل ذلك من خلال تطبيق سمة على أن ProgressBar:

    <لى>

    وتوسيع السمة الافتراضية الخاصة بك وcolorAccent تجاوز

    <style name="AppTheme.WhiteAccent">
        <item name="colorAccent">@color/white</item> <!-- Whatever color you want-->
    </style>
    
    <لى>

    وفي ProgressBar إضافة سمة android:theme:

    android:theme="@style/AppTheme.WhiteAccent"
    

وهكذا سيبدو شيئا من هذا القبيل:

<ProgressBar
        android:id="@+id/loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:padding="10dp"
        android:theme="@style/AppTheme.WhiteAccent" />

وهكذا كنت مجرد تغيير colorAccent لProgressBar الخاصة بك على وجه الخصوص.

ملاحظة : لعن طريق style لن ينجح. تحتاج إلى استخدام android:theme فقط. يمكنك العثور على مزيد من استخدام موضوع هنا: https://plus.google.com/u/0/ + AndroidDevelopers / وظائف / JXHKyhsWHAH

<القوي> جميع API

وإذا كان استخدام جميع API مجرد خلق موضوع في الاسلوب

وstyle.xml

<resources>

    //...

    <style name="progressBarBlue" parent="@style/Theme.AppCompat">
        <item name="colorAccent">@color/blue</item>
    </style>

</resources>

وواستخدامها في التقدم

<ProgressBar
    ...
    android:theme="@style/progressBarBlue" />

على مستوى API 21 و أعلى

وإذا ما استخدمت في مستوى API 21 وأعلى فقط استخدام هذا الرمز:

<ProgressBar
   //...
   android:indeterminate="true"
   android:indeterminateTintMode="src_atop"
   android:indeterminateTint="@color/secondary"/>

وحسب بعض الاقتراحات، يمكنك تحديد شكل وclipdrawable مع اللون، ثم تعيينه. لدي هذا العمل برمجيا. هذا هو كيف أفعل ذلك ..

وتأكد أولا من استيراد مكتبة drawable ..

وimport android.graphics.drawable.*;

وبعد ذلك استخدام رمز شبيه أدناه؛

ProgressBar pg = (ProgressBar)row.findViewById(R.id.progress);
final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 };
pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null,null));
String MyColor = "#FF00FF";
pgDrawable.getPaint().setColor(Color.parseColor(MyColor));
ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
pg.setProgressDrawable(progress);   
pg.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));
pg.setProgress(45);

وهذا عمل بالنسبة لي:

<ProgressBar
 android:indeterminateTint="#d60909"
 ... />

وإذا غير محددة:

((ProgressBar)findViewById(R.id.progressBar))
    .getIndeterminateDrawable()
    .setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);

في الوقت الحاضر في عام 2016 وجدت بعض الأجهزة قبل المصاصة لا تحترم الإعداد colorAccent، حتى بلدي حل نهائي لجميع واجهات برمجة التطبيقات هو الآن ما يلي:

// fixes pre-Lollipop progressBar indeterminateDrawable tinting
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

    Drawable wrapDrawable = DrawableCompat.wrap(mProgressBar.getIndeterminateDrawable());
    DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
    mProgressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
} else {
    mProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), android.R.color.holo_green_light), PorterDuff.Mode.SRC_IN);
}

لنقاط المكافأة، فإنه لا يستخدم أي رمز إهمال. محاولة ذلك!

هذا ما فعلته. عمل.

على ProgressBar:

<ProgressBar
            android:id="@+id/progressBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="4"
            android:indeterminateDrawable="@drawable/progressdrawable"
           />

على progressdrawable.xml:
هنا استخدام التدرج لتغيير لون كما تريد. والروبوت: toDegrees = "X" increse قيمة X وprogressbar تدوير بسرعة. تقليل وتدوير slow.Customize وفقا لاحتياجاتك.

<?xml version="1.0" encoding="utf-8"?>
     <rotate xmlns:android="http://schemas.android.com/apk/res/android"
            android:duration="4000"
            android:fromDegrees="0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="360" >

            <shape
                android:innerRadius="20dp"
                android:shape="ring"
                android:thickness="4dp"
                android:useLevel="false" >
                <size
                    android:height="48dp"
                    android:width="48dp" />

                <gradient
                    android:centerColor="#80ec7e2a"
                    android:centerY="0.5"
                    android:endColor="#ffec7e2a"
                    android:startColor="#00ec7e2a"
                    android:type="sweep"
                    android:useLevel="false" />
            </shape>

        </rotate>

<قوية> عينة:

وضرب نفس المشكلة أثناء العمل على تعديل نظرة / يشعر من شريط التقدم الافتراضي. هنا بعض مزيد من المعلومات التي من شأنها أن نأمل مساعدة الناس:)

  • ويجب أن يحتوي على اسم ملف xml فقط الشخصيات: (! أي لا العواصم) a-z0-9_.
  • للرجوع اليها "drawable" هو R.drawable.filename
  • لتجاوز نظرة الافتراضية، يمكنك استخدام myProgressBar.setProgressDrawable(...)، ولكن تحتاج لا يمكن أن تشير فقط إلى تخطيط مخصص الخاص بك كما R.drawable.filename، تحتاج إلى استرداد أنها Drawable:
    Resources res = getResources();
    myProgressBar.setProgressDrawable(res.getDrawable(R.drawable.filename);
    
  • وتحتاج إلى مجموعة الأنماط قبل تحديد التقدم / تقدم الثانوي / ماكس <م> (إعداد عليه بعد ذلك بالنسبة لي أسفرت عن "فارغة" شريط التقدم)

وهناك ربما الشيء الوحيد الذي لم المشار إليها في هذه الإجابة:

إذا الموضوع الخاص بك هو وراثة من Theme.AppCompat، ProgressBar ستتولى اللون الذي يعرف بأنه "colorAccent" في الموضوع الخاص بك.

وهكذا، وذلك باستخدام ..

<اقتباس فقرة>   

و<item name="colorAccent">@color/custom_color</item>

و.. سوف لون لون ProgressBar التلقائى لل@color/custom_color.

وكيف فعلت ذلك في ProgressBar الأفقي:

    LayerDrawable layerDrawable = (LayerDrawable) progressBar.getProgressDrawable();
    Drawable progressDrawable = layerDrawable.findDrawableByLayerId(android.R.id.progress);
    progressDrawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);

ويمكنك محاولة تغيير الأنماط الخاصة بك، والموضوعات، أو استخدام الروبوت: indeterminateTint = "@ اللون / yourColor" في أي مكان تريد، ولكن هناك طريقة واحدة فقط س فعل من شأنها أن تعمل على أي إصدار الروبوت SKD:

إذا تقدم لك الشريط ليس غير محدد، يرجى استخدام:

progressBar.getProgressDrawable().setColorFilter(ContextCompat.getColor(context, R.color.yourColor), PorterDuff.Mode.SRC_IN );

إذا تقدم لك الشريط هو غير محدد، يرجى استخدام:

progressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), R.color.yourColor), PorterDuff.Mode.SRC_IN );

وإنه لأمر محزن أن الروبوت هو مثل هذه الفوضى!

android:progressTint="#ffffff" 

وأبسط الحل إذا كنت ترغب في تغيير لون في ملف التخطيط أكس، استخدم رمز أدناه واستخدام على indeterminateTint الملكية للون المطلوب.

    <ProgressBar
      android:id="@+id/progressBar"
      style="?android:attr/progressBarStyle"
      android:layout_width="wrap_content"
      android:indeterminate="true"
      android:indeterminateTintMode="src_atop"
      android:indeterminateTint="#ddbd4e"
      android:layout_height="wrap_content"
      android:layout_marginBottom="20dp"
      android:layout_alignParentBottom="true"
      android:layout_centerHorizontal="true" />

وهذا الحل عملت لي:

<style name="Progressbar.White" parent="AppTheme">
    <item name="colorControlActivated">@color/white</item>
</style>

<ProgressBar
    android:layout_width="@dimen/d_40"
    android:layout_height="@dimen/d_40"
    android:indeterminate="true"
    android:theme="@style/Progressbar.White"/>

وشيء واحد أكثر قليلا، وحل موضوع لا عمل إذا كنت ترث موضوع القاعدة، وذلك لتطبيق ضغط الموضوع الخاص بك يجب أن تكون:

<style name="AppTheme.Custom" parent="@style/Theme.AppCompat">
    <item name="colorAccent">@color/custom</item>
</style>

وبعد ذلك وضع هذا في موضوع شريط التقدم

<ProgressBar
    android:id="@+id/progressCircle_progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:theme="@style/AppTheme.Custom"
    android:indeterminate="true"/>

وأرسلت لإضافة معلومات حول PaulieG في الإجابة ، منذ طلب مني ateiob لشرح شيء ...


وأستطيع أن أقول أن هناك (أو على الأقل كان في وقت كتابة عندما نظرت في ذلك الإصدار الحالي من الروبوت شفرة المصدر) خلل / القضية / الأمثل في قانون ProgressBar أن يتجاهل محاولة لتعيين التقدم إلى قيمة هو بالفعل في.

  • وأي بمعنى. إذا تقدم = 45، ومحاولة ضبطه على 45، ورمز لا تفعل شيئا، و لن رسم التقدم .

وبعد استدعاء ProgressBar.setProgressDrawable()، شريط التقدم الخاص بك وسوف يكون فارغا (لأنك غيرت جزء drawable).

وهذا يعني أنك بحاجة إلى تعيين التقدم، ورسم عليه. ولكن إذا كنت مجرد مجموعة التقدم إلى قيمة الحفاظ عليها، انها لن تفعل شيئا.

ويجب تعيينها إلى 0 أولا، ثم إلى القيمة "القديمة" مرة أخرى، وسوف شريط رسم.


وهكذا لتلخيص:

  • والحفاظ على "القديمة" قيمة التقدم
  • وتحديث drawable / اللون (يجعل شريط فارغ)
  • وإعادة التقدم إلى 0 (وإلا السطر التالي لا يفعل شيئا)
  • وإعادة تعيين التقدم إلى (شريط إصلاحات) "القديمة" قيمة
  • ويبطل

وفيما يلي طريقة لدي أن يفعل هذا:

protected void onResume()
{
    super.onResume();
    progBar = (ProgressBar) findViewById(R.id.progress_base);

    int oldProgress = progBar.getProgress();

    // define new drawable/colour
    final float[] roundedCorners = new float[]
        { 5, 5, 5, 5, 5, 5, 5, 5 };
    ShapeDrawable shape = new ShapeDrawable(new RoundRectShape(
        roundedCorners, null, null));
    String MyColor = "#FF00FF";
    shape.getPaint().setColor(Color.parseColor(MyColor));
    ClipDrawable clip = new ClipDrawable(shape, Gravity.LEFT,
        ClipDrawable.HORIZONTAL);
    progBar.setProgressDrawable(clip);

    progBar.setBackgroundDrawable(getResources().getDrawable(
        android.R.drawable.progress_horizontal));

    // work around: setProgress() ignores a change to the same value
    progBar.setProgress(0);
    progBar.setProgress(oldProgress);

    progBar.invalidate();
}

وبقدر ما حل HappyEngineer، وأنا أعتقد أنه كان حلا مماثلا، لتعيين "التقدم" تعويض يدويا. في كلتا الحالتين، يجب رمز أعلاه عمل لك.

واستخدام android.support.v4.graphics. drawable.DrawableCompat :

            Drawable progressDrawable = progressBar.getIndeterminateDrawable();
            if (progressDrawable  != null) {
                Drawable mutateDrawable = progressDrawable.mutate();
                DrawableCompat.setTint(mutateDrawable, primaryColor);
                progressBar.setProgressDrawable(mutateDrawable);
            }

لأسلوب استخدام ProgressBar I الأفقي:

import android.widget.ProgressBar;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.ClipDrawable;
import android.view.Gravity;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;

public void setColours(ProgressBar progressBar,
                        int bgCol1, int bgCol2, 
                        int fg1Col1, int fg1Col2, int value1,
                        int fg2Col1, int fg2Col2, int value2)
  {
    //If solid colours are required for an element, then set
    //that elements Col1 param s the same as its Col2 param
    //(eg fg1Col1 == fg1Col2).

    //fgGradDirection and/or bgGradDirection could be parameters
    //if you require other gradient directions eg LEFT_RIGHT.

    GradientDrawable.Orientation fgGradDirection
        = GradientDrawable.Orientation.TOP_BOTTOM;
    GradientDrawable.Orientation bgGradDirection
        = GradientDrawable.Orientation.TOP_BOTTOM;

    //Background
    GradientDrawable bgGradDrawable = new GradientDrawable(
            bgGradDirection, new int[]{bgCol1, bgCol2});
    bgGradDrawable.setShape(GradientDrawable.RECTANGLE);
    bgGradDrawable.setCornerRadius(5);
    ClipDrawable bgclip = new ClipDrawable(
            bgGradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);     
    bgclip.setLevel(10000);

    //SecondaryProgress
    GradientDrawable fg2GradDrawable = new GradientDrawable(
            fgGradDirection, new int[]{fg2Col1, fg2Col2});
    fg2GradDrawable.setShape(GradientDrawable.RECTANGLE);
    fg2GradDrawable.setCornerRadius(5);
    ClipDrawable fg2clip = new ClipDrawable(
            fg2GradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);        

    //Progress
    GradientDrawable fg1GradDrawable = new GradientDrawable(
            fgGradDirection, new int[]{fg1Col1, fg1Col2});
    fg1GradDrawable.setShape(GradientDrawable.RECTANGLE);
    fg1GradDrawable.setCornerRadius(5);
    ClipDrawable fg1clip = new ClipDrawable(
            fg1GradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);        

    //Setup LayerDrawable and assign to progressBar
    Drawable[] progressDrawables = {bgclip, fg2clip, fg1clip};
    LayerDrawable progressLayerDrawable = new LayerDrawable(progressDrawables);     
    progressLayerDrawable.setId(0, android.R.id.background);
    progressLayerDrawable.setId(1, android.R.id.secondaryProgress);
    progressLayerDrawable.setId(2, android.R.id.progress);

    //Copy the existing ProgressDrawable bounds to the new one.
    Rect bounds = progressBar.getProgressDrawable().getBounds();
    progressBar.setProgressDrawable(progressLayerDrawable);     
    progressBar.getProgressDrawable().setBounds(bounds);

    // setProgress() ignores a change to the same value, so:
    if (value1 == 0)
        progressBar.setProgress(1);
    else
        progressBar.setProgress(0);
    progressBar.setProgress(value1);

    // setSecondaryProgress() ignores a change to the same value, so:
    if (value2 == 0)
        progressBar.setSecondaryProgress(1);
    else
        progressBar.setSecondaryProgress(0);
    progressBar.setSecondaryProgress(value2);

    //now force a redraw
    progressBar.invalidate();
  }

ومن شأن دعوة الأمثلة على ذلك:

  setColours(myProgressBar, 
          0xff303030,   //bgCol1  grey 
          0xff909090,   //bgCol2  lighter grey 
          0xff0000FF,   //fg1Col1 blue 
          0xffFFFFFF,   //fg1Col2 white
          50,           //value1
          0xffFF0000,   //fg2Col1 red 
          0xffFFFFFF,   //fg2Col2 white
          75);          //value2

إذا كنت لا تحتاج إلى "التقدم الثانوي" و value2 ببساطة مجموعة إلى VALUE1.

وتطبيق هذا النمط مخصص لشريط التقدم.

<style name="customProgress" parent="@android:style/Widget.ProgressBar.Small">
        <item name="android:indeterminateDrawable">@drawable/progress</item>
        <item name="android:duration">40</item>
        <item name="android:animationCache">true</item>
        <item name="android:drawingCacheQuality">low</item>
        <item name="android:persistentDrawingCache">animation</item>
    </style>

و @drawable / progress.xml -

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/spinner_white"
    android:pivotX="50%"
    android:pivotY="50%" />

استخدم هذا النوع من صورة لشريط التقدم.

لنتيجة أفضل يمكنك استخدام عدة صور التقدم. ورجاء لا تتردد باستخدام الصور، لأن الروبوت منصة نفسها استخدام الصور لprogressbar. يتم استخراج رمز من SDK:)

وهنا هو رمز لتغيير لون ProgressBar التي كتبها برمجيا.

ProgressBar progressBar = (ProgressBar) findViewById(R.id.pb_listProgressBar);
int colorCodeDark = Color.parseColor("#F44336");
progressBar.setIndeterminateTintList(ColorStateList.valueOf(colorCodeDark));

ProgressBar freeRamPb = findViewById(R.id.free_ram_progress_bar);

freeRamPb.getProgressDrawable().setColorFilter(
Color.BLUE, android.graphics.PorterDuff.Mode.SRC_IN);

ProgressBar bar;

private Handler progressBarHandler = new Handler();

GradientDrawable progressGradientDrawable = new GradientDrawable(
        GradientDrawable.Orientation.LEFT_RIGHT, new int[]{
                0xff1e90ff,0xff006ab6,0xff367ba8});
ClipDrawable progressClipDrawable = new ClipDrawable(
        progressGradientDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
Drawable[] progressDrawables = {
        new ColorDrawable(0xffffffff),
        progressClipDrawable, progressClipDrawable};
LayerDrawable progressLayerDrawable = new LayerDrawable(progressDrawables);


int status = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // TODO Auto-generated method stub
    setContentView(R.layout.startup);

    bar = (ProgressBar) findViewById(R.id.start_page_progressBar);
    bar.setProgress(0);
    bar.setMax(100);

    progressLayerDrawable.setId(0, android.R.id.background);
    progressLayerDrawable.setId(1, android.R.id.secondaryProgress);
    progressLayerDrawable.setId(2, android.R.id.progress);

    bar.setProgressDrawable(progressLayerDrawable);
}

وهذا ساعدني على تعيين لون مخصص لprogressbar خلال التعليمات البرمجية. نأمل أن يساعد

وحسب محمد العادل اقترح لSDK النسخة 21 وفوق

android:indeterminateTint="@color/orange"

وفي الأشغال XML بالنسبة لي، هو سهل بما فيه الكفاية.

ومن ذلك بسيط باستخدام ATTR، إذا كنت تتعامل مع تطبيقات multistyle:

وحاول بهذه الطريقة:

وأعلن أدناه السمة attrs.xml

 <attr name="circularProgressTheme" format="reference"></attr>

ولصق رمز أدناه في styles.xml

 <style name="ProgressThemeWhite" parent="ThemeOverlay.AppCompat.Light">
        <item name="colorAccent">#FF0000</item>
    </style>

    <style name="circularProgressThemeWhite">
        <item name="android:theme">@style/ProgressThemeWhite</item>
    </style>


  <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

   <item name="circularProgressTheme">@style/circularProgressThemeWhite</item>

 </style>

واستخدام شريط التقدم مثل أدناه

  <ProgressBar
        style="?attr/circularProgressTheme"
        android:id="@+id/commonProgress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:visibility="visible"/>

<القوي> أفقي شريط التقدم المادي أسلوب مخصص:

لتغيير لون الخلفية والتقدم من شريط التقدم الأفقي.

<style name="MyProgressBar" parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
    <item name="android:progressBackgroundTint">#69f0ae</item>
    <item name="android:progressTint">#b71c1c</item>
    <item name="android:minWidth">200dp</item>
</style>

وتطبيقه على شريط التقدم عن طريق تحديد سمة نمط، مخصص أنماط المادية والتقدم مخصص شريط الاختيار <لأ href = "http://www.zoftino.com/android-progressbar-and-custom-progressbar-examples" يختلط = "noreferrer نوفولو"> http://www.zoftino.com/android-progressbar-and-custom-progressbar-examples

لتغيير لون ProgressBar الأفقي (في kotlin):

fun tintHorizontalProgress(progress: ProgressBar, @ColorInt color: Int = ContextCompat.getColor(progress.context, R.color.colorPrimary)){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        progress.progressTintList = ColorStateList.valueOf(color)
    } else{
        val layerDrawable = progress.progressDrawable as? LayerDrawable
        val progressDrawable = layerDrawable?.findDrawableByLayerId(android.R.id.progress)
        progressDrawable?.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
    }
}

لتغيير لون غير محدد ProgressBar:

fun tintIndeterminateProgress(progress: ProgressBar, @ColorInt color: Int = ContextCompat.getColor(progress.context, R.color.colorPrimary)){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        progress.indeterminateTintList = ColorStateList.valueOf(color)
    } else {
        (progress.indeterminateDrawable as? LayerDrawable)?.apply {
            if (numberOfLayers >= 2) {
                setId(0, android.R.id.progress)
                setId(1, android.R.id.secondaryProgress)
                val progressDrawable = findDrawableByLayerId(android.R.id.progress).mutate()
                progressDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
            }
        }
    }
}

وأخيرا عادة لون ما قبل مصاصة progressBars

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow