2010-04-14 94 views
60

Tôi đang tìm kiếm một điều rất rõ ràng (bằng các ngôn ngữ khác !!) và nó khiến tôi phát điên!Làm cách nào để thay đổi màu ProgressBar không xác định của Android?

Tôi muốn biết làm cách nào tôi có thể thay đổi màu ProgressBar không xác định từ màu trắng/xám sang màu đen? Khi tôi thay đổi indeterminateDrawable, tôi nhận được một hình ảnh tĩnh thay vì một progressBar hoạt hình di chuyển. Có cách nào để làm điều đó chỉ đơn giản trong xml?

Cảm ơn bạn!

Trả lời

-4

thực sự tất cả những gì bạn cần làm (đối với cả cirle và bar) là tạo một tệp xml có thể vẽ như được hiển thị bên dưới ...... progress_spinner_001 trỏ đến bất kỳ hình ảnh nào bạn muốn tạo hiệu ứng và thời lượng ... bao lâu u muốn hiển thị mỗi khung cho ....... và thiết lập ur android: indeterminateDrawable = filename_in_drawable ....

<?xml version="1.0" encoding="utf-8"?> 
<animation-list 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false"> 
<item android:drawable="@drawable/progress_spinner_001" android:duration="300" /> 
<item android:drawable="@drawable/progress_spinner_002" android:duration="300" /> 
<item android:drawable="@drawable/progress_spinner_003" android:duration="300" /> 
    <item android:drawable="@drawable/progress_spinner_004" android:duration="300" /> 
    <item android:drawable="@drawable/progress_spinner_005" android:duration="300" /> 
     <item android:drawable="@drawable/progress_spinner_006" android:duration="300" /> 
    <item android:drawable="@drawable/progress_spinner_007" android:duration="300" /> 
    <item android:drawable="@drawable/progress_spinner_008" android:duration="300" /> 
</animation-list> 

ps u có thể cần phải thay đổi kích thước progressbar để hiển thị như mong muốn

+4

-1: câu trả lời này cho biết "như hình dưới đây" nhưng nó không hiển thị gì cả. Tôi thấy rất khó hiểu. –

64

Để có được một ProgressBar trong chủ đề mặc định được sử dụng trên nền trắng/ánh sáng trở lại, sử dụng một trong các kiểu nghịch đảo:

<ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/> 
<ProgressBar style="@android:style/Widget.ProgressBar.Large.Inverse"/> 
<ProgressBar style="@android:style/Widget.ProgressBar.Small.Inverse"/> 

Điều này thường sẽ cho bạn màu đen trên suốt ProgressBar, nhưng một số cài đặt hệ điều hành sử dụng nội dung tùy chỉnh. Nếu bạn đang tìm kiếm một màu cụ thể, bạn sẽ phải cuộn các bản vẽ của riêng mình bằng cách làm theo các hướng dẫn do CommonsWare cung cấp.

+0

Điều này dường như không phải là giải pháp thuyết bất khả tri. Trên tốc độ LG Optimus 2X của tôi, ProgressBar không xác định vẫn luôn là màu đen, trong khi trên HTC Desire HD với CyanogenMod cho 2.3.3, nó luôn luôn là màu đỏ. –

+0

@Paul - Có, bạn là chính xác. Nhiều nhà sản xuất thiết bị tùy chỉnh các chủ đề và chủ đề mặc định có thể thay đổi giữa các phiên bản Android. Tôi sẽ sửa văn bản ở trên – Anm

+0

đã làm việc cho tôi. cảm ơn – serggl

7
<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@android:id/background" android:drawable="@drawable/bg" /> 
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/secondary" /> 
    <item android:id="@android:id/progress" android:drawable="@drawable/progress" /> 
</layer-list> 
63
progressBar.getIndeterminateDrawable().setColorFilter(
      getResources().getColor(Your_Color), 
      android.graphics.PorterDuff.Mode.SRC_IN); 

và thay thế Your_Color với màu sắc mong muốn như: R.color.your_color_code

+0

điều này nên được chấp nhận câu trả lời;) – Leo

+0

Đây là cách nhanh nhất và dễ dàng nhất. –

+8

Có thể xác định trong xml: 'android: indeterminateTint =" @ colors/your_color "' 'android: indeterminateTintMode =" src_in "' – zhaoyuanjie

10

Tôi thấy câu trả lời khác là khá cũ, để thay đổi màu ProgressBar không xác định bạn chỉ cần đặt thuộc tính android:indeterminateTintandroid:indeterminateTintMode trong mục ProgressBar trực tiếp trong XML:

<ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:indeterminateTint="@color/colorPrimary" 
    android:indeterminateTintMode="src_in" 
    android:indeterminate="true" /> 

android:indeterminateTint - Màu để áp dụng cho chỉ báo tiến trình không xác định.

Phải là một giá trị màu, theo hình thức "#rgb", "#argb", "#rrggbb", "#aarrggbb", hoặc một tham chiếu đến một tài nguyên @color/colorPrimary.

android:indeterminateTintMode - Chế độ hòa trộn được sử dụng để áp dụng màu chỉ báo tiến trình.

Phải là một trong những giá trị không đổi sau:
add, multiply, screen, src_atop, src_in hay src_over

Getter và phương pháp Setter cho những thuộc tính này là:

Tất cả trong số họ đã được thêm vào trong API level 21

+1

Làm việc tốt, cảm ơn bạn – Duque

+1

Thankssssssssss :) – Denees

+0

Hoạt động hoàn hảo đây là giải pháp tuyệt vời, tôi đã tìm kiếm khoảng 2 giờ giải pháp khác nhau, cảm ơn rất nhiều! –

0

Đối với API dưới 23 sử dụng

progressBar.getIndeterminateDrawable().setColorFilter(
     getResources().getColor(Your_Color), 
     android.graphics.PorterDuff.Mode.SRC_IN); 

khác sử dụng

progressBar.getIndeterminateDrawable().setColorFilter(
     ContextCompat.getColor(context, Your_Color), 
     android.graphics.PorterDuff.Mode.SRC_IN); 
Các vấn đề liên quan