Android에서 ProgressBar의 진행률 표시기 색상을 변경하는 방법
수을설습니다했정평▁로 설정했습니다.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>
필요에 따라 색상을 변경할 수 있습니다. 그러면 녹색 진행 표시줄이 나타납니다.
더 간단한 솔루션:
진행_그림그리기_파란색
<?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"/>
진행 표시줄이 수평이거나 원형인 것은 중요하지 않습니다.이상입니다.
API 레벨 21 이상의 경우 그냥 사용합니다.
android:progressBackgroundTint="@color/yourBackgroundColor"
android:progressTint="@color/yourColor"
진행 표시줄 색상만 변경하려는 경우, 활동의 작성() 방법에서 색상 필터를 사용하면 됩니다.
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);
여기서 나온 아이디어.
롤리팝 이전 버전의 경우에만 이 작업을 수행하면 됩니다.롤리팝에서 colorAccent 스타일 속성을 사용할 수 있습니다.
재료 구성요소 라이브러리를 사용하여 특성과 함께 를 사용하여 색상을 변경할 수 있습니다.
<com.google.android.material.progressindicator.LinearProgressIndicator
app:indicatorColor="@color/..."
app:trackThickness="..."
app:trackColor="@color/..."
/>
참고: 버전 이상이 필요합니다.1.3.0-alpha04
.
에서는 다음을 사용하여 색상을 재정의할 수 있습니다.
<ProgressBar
android:theme="@style/CustomProgressBarTheme"
..>
포함:
<style name="CustomProgressBarTheme">
<item name="colorAccent">@color/primaryDarkColor</item>
</style>
이 문제를 해결하는 방법은 세 가지가 있습니다.
- 진행률 표시줄 색상을 선언적으로 조정하는 방법
- 프로그래밍 방식으로 진행 표시줄 색을 조정하지만 컴파일 시간 전에 선언된 다양한 미리 결정된 색 중에서 색을 선택하는 방법
- 진행 표시줄 색을 프로그래밍 방식으로 조정하고 색을 프로그래밍 방식으로 만드는 방법.
특히 amfcosta의 답변에 대한 댓글에서 볼 수 있듯이 #2와 #3 주변에 많은 혼란이 있습니다.이 대답은 배경색만 수정하므로 진행 표시줄을 기본 색상을 제외한 다른 색상으로 설정할 때마다 예측할 수 없는 색상 결과를 생성하며, 실제 진행 표시줄 "클립" 영역은 여전히 불투명도가 감소된 노란색 오버레이가 됩니다.예를 들어, 이 방법을 사용하여 배경을 진한 보라색으로 설정하면 알파를 통해 진한 보라색과 노란색이 혼합되어 비정상적인 분홍색의 진행 표시줄 "클립" 색상이 생성됩니다.
따라서 어쨌든 #1은 Ryan이 완벽하게 답하고 Shtarke는 #3의 대부분을 답하지만 #2와 #3에 대한 완벽한 해결책을 찾는 사람들에게는 다음과 같습니다.
진행률 표시줄 색상을 프로그래밍 방식으로 조정하지만 XML로 선언된 미리 결정된 색상 중에서 색상을 선택하는 방법
res/drawable/my_drawablebar.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>
Java의 경우:
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)
진행률 표시줄 색을 프로그래밍 방식으로 조정하고 색을 프로그래밍 방식으로 만드는 방법
편집: 이 문제를 제대로 해결할 시간을 찾았습니다.저의 이전 답변은 이것을 약간 모호하게 남겼습니다.
진행률 표시줄은 도면층 그리기 테이블에서 그리기 가능한 3개로 구성됩니다.
- 계층 1이 배경입니다.
- 레이어 2는 보조 진행 색상입니다.
- 레이어 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"
final LayerDrawable layers = (LayerDrawable) progressBar.getProgressDrawable();
layers.getDrawable(2).setColorFilter(color,PorterDuff.Mode.SRC_IN);
간히덧임을 추가합니다.android:indeterminateTint="@color/colorPrimary"
의 진행에 바에행.
예:
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateTint="@color/colorPrimary"/>
BarStyle change 진행인경우중 BarStyle Horizontal 경android:progressTint="@color/colorPrimary"
예:
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:progress="50"
android:progressTint="@color/colorPrimary" />
제가 발견한 가장 간단한 해결책은 다음과 같습니다.
<item name="colorAccent">@color/white_or_any_color</item>
위 내용을 입력합니다.styles.xml
철다하 아래에 파일을 합니다.res > values
폴더를 누릅니다.
참고: 다른 액센트 색상을 사용하는 경우 이전 솔루션이 적합합니다.
API 21 이상
진행률 표시줄에 Android 추가:int="@color/red"(사용자의 색상)를 결정하지 마십시오.
프로그래밍 방식으로 실행하는 방법을 찾는 사용자:
Drawable bckgrndDr = new ColorDrawable(Color.RED);
Drawable secProgressDr = new ColorDrawable(Color.GRAY);
Drawable progressDr = new ScaleDrawable(new ColorDrawable(Color.BLUE), Gravity.LEFT, 1, -1);
LayerDrawable resultDr = new LayerDrawable(new Drawable[] { bckgrndDr, secProgressDr, progressDr });
//setting ids is important
resultDr.setId(0, android.R.id.background);
resultDr.setId(1, android.R.id.secondaryProgress);
resultDr.setId(2, android.R.id.progress);
그리기 가능한 id를 설정하는 것은 매우 중요하며 범위와 실제 진행 상태 막대를 보존합니다.
위해서LinearProgressIndicator
에서 온com.google.android.material.progressindicator
당신은 그것을 가지고 놀 수 있습니다.trackColor
그리고.indicatorColor
당신들은 정말 나를 골치 아프게 합니다.먼저 xml을 통해 도면층 목록을 그릴 수 있도록 만든 다음(첫 번째 도면층은 배경, 두 번째 도면층은 2차 진행률을, 마지막 도면층은 1차 진행률을 나타내는 또 다른 도면층) 다음을 수행하여 코드의 색상을 변경합니다.
public void setPrimaryProgressColor(int colorInstance) {
if (progressBar.getProgressDrawable() instanceof LayerDrawable) {
Log.d(mLogTag, "Drawable is a layer drawable");
LayerDrawable layered = (LayerDrawable) progressBar.getProgressDrawable();
Drawable circleDrawableExample = layered.getDrawable(<whichever is your index of android.R.id.progress>);
circleDrawableExample.setColorFilter(colorInstance, PorterDuff.Mode.SRC_IN);
progressBar.setProgressDrawable(layered);
} else {
Log.d(mLogTag, "Fallback in case it's not a LayerDrawable");
progressBar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
이 방법을 사용하면 나중에 구조를 수정하지 않고 원래 그리기 가능한 크기를 xml에 선언할 수 있으며, 특히 xml 파일 화면 폴더를 지정해야 할 경우 코드를 통해 색상만 수정할 수 있습니다.새 ShapeDrawable을 처음부터 다시 인스턴스화할 수 없습니다.
Progress Bar 색상은 다음과 같이 변경할 수 있습니다.
/res/values/values.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorAccent">#FF4081</color>
</resources>
/res/values/styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorAccent">@color/colorAccent</item>
</style>
작성 시:
progressBar = (ProgressBar) findViewById(R.id.progressBar);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Drawable drawable = progressBar.getIndeterminateDrawable().mutate();
drawable.setColorFilter(ContextCompat.getColor(this, R.color.colorAccent), PorterDuff.Mode.SRC_IN);
progressBar.setIndeterminateDrawable(drawable);
}
필요한 배경을 그릴 수 있는 리소스를 만듭니다. 이 경우 bg_custom_progressbar.xml로 이름을 지정했습니다.
<?xml version="1.0" encoding="utf-8"?>
<item>
<shape android:shape="rectangle" >
<corners android:radius="5dp"/>
<gradient
android:angle="180"
android:endColor="#DADFD6"
android:startColor="#AEB9A3" />
</shape>
</item>
<item>
<clip>
<shape android:shape="rectangle" >
<corners android:radius="5dp" />
<gradient
android:angle="180"
android:endColor="#44CF4A"
android:startColor="#2BB930" />
</shape>
</clip>
</item>
<item>
<clip>
<shape android:shape="rectangle" >
<corners android:radius="5dp" />
<gradient
android:angle="180"
android:endColor="#44CF4A"
android:startColor="#2BB930" />
</shape>
</clip>
</item>
그런 다음 다음과 같은 사용자 지정 배경을 사용합니다.
<ProgressBar
android:id="@+id/progressBarBarMenuHome"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="6dp"
android:indeterminate="false"
android:max="100"
android:minWidth="200dp"
android:minHeight="50dp"
android:progress="10"
android:progressDrawable="@drawable/bg_custom_progressbar" />
그것은 저에게 잘 작동합니다.
사용자 정의 그리기 가능을 사용하여 진행률 표시줄을 스타일 지정할 수 있습니다.그리기 가능한 파일 만들기
progress_user_badge.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 android:shape="rectangle">
<corners android:radius="@dimen/_5sdp"/>
<solid android:color="@color/your_default_color" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape android:shape="rectangle">
<corners android:radius="@dimen/_5sdp"/>
<solid android:color="@color/your_exact_color" />
</shape>
</clip>
</item>
</layer-list>
이제 위젯에서 그릴 수 있는 파일을 사용합니다.
<ProgressBar
android:id="@+id/badge_progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="@dimen/_200sdp"
android:layout_height="@dimen/_7sdp"
android:layout_gravity="center"
android:layout_marginTop="@dimen/_15sdp"
android:indeterminate="false"
android:max="100"
android:progress="70"
android:progressDrawable="@drawable/progress_user_badge"/>
아래 줄을 사용하여 진행률 표시줄의 진행 색상을 프로그래밍 방식으로 변경할 수 있습니다.
badge_progress_bar.progressTintList = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.your_color))
xml 단위:
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleInverse"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_margin="@dimen/dimen_10dp"
android:indeterminateTint="@{viewModel.getComplainStatusUpdate(position)}"
android:indeterminate="true"
android:indeterminateOnly="false"
android:max="100"
android:clickable="false"
android:indeterminateDrawable="@drawable/round_progress"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
모델 보기:
fun getComplainStatusUpdate(position: Int):Int{
val list = myAllComplainList!!.getValue()
if (list!!.get(position).complainStatus.equals("P")) {
// progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
// progressBar.setBackgroundResource(R.drawable.circle_shape)
return Color.RED
} else if (list!!.get(position).complainStatus.equals("I")) {
return Color.GREEN
} else {
return Color.GREEN
}
return Color.CYAN
}
Android에서 기본 및 보조 진행 색상을 프로그래밍 방식으로 수평 진행 표시줄로 설정하려면 아래 스니펫을 사용합니다.
int[][] states = new int[][] {
new int[] {-android.R.attr.state_checked},
new int[] {android.R.attr.state_checked},
};
int[] secondaryColor = new int[] {
context.getResources().getColor(R.color.graph_line_one),
Color.RED,
};
int[] primaryColor = new int[] {
context.getResources().getColor(R.color.middle_progress),
Color.BLUE,
};
progressbar.setProgressTintList(new ColorStateList(states, primaryColor));
progressbar.setSecondaryProgressTintList(new ColorStateList(states, secondaryColor));
xml에서 이 옵션을 사용할 수 있습니다.
android:indeterminateTint="your_color"
언급URL : https://stackoverflow.com/questions/5745814/how-to-change-progressbars-progress-indicator-color-in-android
'programing' 카테고리의 다른 글
TLS에 대한 클라이언트 및 서버 인증서를 선택해야 하는 이유 (0) | 2023.08.05 |
---|---|
어레이의 정확한 복제 사본을 만들려면 어떻게 해야 합니까? (0) | 2023.07.31 |
PowerShell에서 모든 빈 폴더를 재귀적으로 제거하는 방법은 무엇입니까? (0) | 2023.07.31 |
tnsping을 설치하는 방법은 무엇입니까? (0) | 2023.07.31 |
동적 및 네임스페이스 모듈이 등록되지 않았습니다(vuex-module-decorator, vuex-class). (0) | 2023.07.31 |