Android에서 ProgressBar의 진행률 표시기 색상을 변경하는 방법 android:layout_width=”80dip”

Horizontal을 설정했습니다 ProgressBar.

진행 색상을 노란색으로 변경하고 싶습니다.

<ProgressBar 
    android:id="@+id/progressbar" 
    android:layout_width="80dip" 
    android:layout_height="20dip"  
    android:focusable="false" 
    style="?android:attr/progressBarStyleHorizontal" />

문제는 진행 색상이 장치마다 다릅니다. 그래서 진행 색상을 수정하고 싶습니다.



답변

내 앱 중 하나에서 이것을 복사 했으므로 몇 가지 추가 속성이 있지만 아이디어를 제공해야합니다. 진행률 표시 줄이있는 레이아웃에서 가져온 것입니다.

<ProgressBar
    android:id="@+id/ProgressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:indeterminate="false"
    android:maxHeight="10dip"
    android:minHeight="10dip"
    android:progress="50"
    android:progressDrawable="@drawable/greenprogress" />

그런 다음 다음과 유사한 것을 사용하여 새 드로어 블을 만듭니다 (이 경우 greenprogress.xml).

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
            <gradient
                android:angle="270"
                android:centerColor="#ff5a5d5a"
                android:centerY="0.75"
                android:endColor="#ff747674"
                android:startColor="#ff9d9e9d" />
        </shape>
    </item>

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

</layer-list>

필요에 따라 색상을 변경할 수 있으며 녹색 진행률 표시 줄이 나타납니다.


답변

더 간단한 해결책 :

progess_drawable_blue

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
    <shape>
        <solid
                android:color="@color/disabled" />
    </shape>
</item>

<item
    android:id="@android:id/progress">
    <clip>
        <shape>
            <solid
                android:color="@color/blue" />
        </shape>
    </clip>
</item>

</layer-list>


답변

에서 스타일을 만드십시오 values/styles.xml.

<style name="ProgressBarStyle">
    <item name="colorAccent">@color/greenLight</item>
</style>

그런 다음이 스타일을 ProgressBar테마 로 설정하십시오 .

<ProgressBar
    android:theme="@style/ProgressBarStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

진행률 표시 줄이 가로 또는 원형인지는 중요하지 않습니다. 그게 다야.


답변

진행률 막대 색상 만 변경하려면 Activity의 onCreate () 메서드에서 색상 필터를 사용하면됩니다.

ProgressBar progressbar = (ProgressBar) findViewById(R.id.progressbar);
int color = 0xFF00FF00;
progressbar.getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
progressbar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);

여기 에서 아이디어 .

롤리팝 이전 버전의 경우에만이 작업을 수행하면됩니다. Lollipop에서는 colorAccent 스타일 속성을 사용할 수 있습니다.


답변

API 레벨 21 이상의 경우

android:progressBackgroundTint="@color/yourBackgroundColor"
android:progressTint="@color/yourColor"


답변

이 질문을 해결하는 세 가지 방법이 있습니다.

  1. 진행률 표시 줄 색상을 선언적으로 조정하는 방법
  2. 프로그래밍 방식으로 진행률 막대 색상을 조정하지만 컴파일 타임 전에 선언 된 다양한 미리 결정된 색상 중에서 색상을 선택하는 방법
  3. 프로그래밍 방식으로 진행률 막대 색상을 조정하고 프로그래밍 방식으로 색상을 만드는 방법

특히 amfcosta의 답변에 대한 의견에서 볼 수 있듯이 # 2와 # 3 주위에는 많은 혼란이 있습니다. 이 답변은 진행률 표시 줄을 기본 색상 이외의 다른 색상으로 설정하려고 할 때 예측할 수없는 색상 결과를 생성합니다. 배경색 만 수정하므로 실제 진행률 표시 줄 “클립”영역은 불투명도가 감소 된 노란색 오버레이입니다. 예를 들어,이 방법을 사용하여 배경을 진한 자주색으로 설정하면 감소 된 알파를 통한 진한 자주색과 노란색 혼합으로 인해 약간의 분홍빛이 도는 분홍색의 진행 막대 “클립”색상이 생성됩니다.

어쨌든 # 1은 Ryan이 완벽하게 대답하고 Štarke는 대부분 # 3에 대답하지만 # 2와 # 3에 대한 완벽한 솔루션을 찾는 사람들에게는 다음과 같습니다.


프로그래밍 방식으로 진행률 표시 줄 색상을 조정하지만 XML로 선언 된 미리 결정된 색상에서 색상을 선택하는 방법

res / drawable / my_progressbar.xml :

이 파일을 작성하지만 my_progress 및 my_secondsProgress에서 색상을 변경하십시오.

(참고 : 기본 Android SDK ProgressBar를 정의하는 실제 XML 파일의 복사본 일 뿐이지 만 ID와 색상을 변경했습니다. 원본의 이름은 progress_horizontal입니다)

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

<item android:id="@+id/my_progress_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="@+id/my_secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <gradient
                android:startColor="#80ff171d"
                android:centerColor="#80ff1315"
                android:centerY="0.75"
                android:endColor="#a0ff0208"
                android:angle="270"
                />
        </shape>
    </clip>
</item>

<item android:id="@+id/my_progress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <gradient
                android:startColor="#7d2afdff"
                android:centerColor="#ff2afdff"
                android:centerY="0.75"
                android:endColor="#ff22b9ba"
                android:angle="270"
                />
        </shape>
    </clip>
</item>

당신의 자바에서 :

final Drawable drawable;
int sdk = android.os.Build.VERSION.SDK_INT;
    if(sdk < 16) {
        drawable =  ctx.getResources().getDrawable(R.drawable.my_progressbar);
    } else {
        drawable = ContextCompat.getDrawable(ctx, R.drawable.my_progressbar);
    }
progressBar.setProgressDrawable(drawable)

프로그래밍 방식으로 진행률 막대 색상을 조정하고 프로그래밍 방식으로 색상을 만드는 방법

편집 : 나는 이것을 올바르게 해결할 시간을 찾았습니다. 내 전 대답은 이것을 조금 모호하게했습니다.

ProgressBar는 LayerDrawable에서 3 개의 Drawables로 구성됩니다.

  1. 레이어 1은 배경입니다
  2. 레이어 2는 보조 진행 색상입니다.
  3. 레이어 3은 주요 진행률 표시 줄 색상입니다.

아래 예에서는 기본 진행률 표시 줄의 색상을 녹청으로 변경합니다.

//Create new ClipDrawable to replace the old one
float pxCornerRadius = viewUtils.convertDpToPixel(5);
final float[] roundedCorners = new float[] { pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius };
ShapeDrawable shpDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null, null));
shpDrawable.getPaint().setColor(Color.CYAN);
final ClipDrawable newProgressClip = new ClipDrawable(shpDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);

//Replace the existing ClipDrawable with this new one
final LayerDrawable layers = (LayerDrawable) progressBar.getProgressDrawable();
layers.setDrawableByLayerId(R.id.my_progress, newProgressClip);

이 예에서는 단색으로 설정했습니다. 교체하여 그라디언트 색상으로 설정할 수 있습니다

shpDrawable.getPaint().setColor(Color.CYAN);

Shader shader = new LinearGradient(0, 0, 0, progressBar.getHeight(), Color.WHITE, Color.BLACK, Shader.TileMode.CLAMP);
shpDrawable.getPaint().setShader(shader);

건배.

-창


답변

API 레벨 21 이상인 경우 다음 XML 속성을 사용할 수 있습니다.

<!-- For indeterminate progress bar -->
android:indeterminateTint="@color/white"
<!-- For normal progress bar -->
android:progressTint="@color/white"