كيفية تغيير لون التقدم شريط التقدم في الروبوت
https://stackoverflow.com/questions/2020882
السؤال الكامل
المحلول
وأنا آسف أنها ليست الحل، ولكن ما يقود شرط تحديد ذلك من التعليمات البرمجية؟
ويجب .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