安卓随进度条覆盖住的文字颜色发生改变
时间: 2023-12-07 16:04:37 浏览: 72
在 Android 中,可以使用 SpannableString 和 SpannableStringBuilder 来实现对文字的格式化和样式设置。因此,可以通过在进度条上覆盖一个 TextView,并在更新进度的同时,动态设置 TextView 中文字的颜色和样式,来实现随进度条覆盖住的文字颜色发生改变。
以下是一个简单的示例代码:
1. 在布局文件中添加 ProgressBar 和 TextView,将 TextView 放在 ProgressBar 上方:
```
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="10dp"
android:max="100"
android:progress="50"/>
<TextView
android:id="@+id/progress_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="50%"
android:textAlignment="center"/>
</LinearLayout>
```
2. 在代码中,获取 ProgressBar 和 TextView 对象,并设置 ProgressBar 的 OnSeekBarChangeListener,监听进度的变化:
```
ProgressBar progressBar = findViewById(R.id.progress_bar);
TextView progressText = findViewById(R.id.progress_text);
progressBar.setOnSeekBarChangeListener(new ProgressBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(ProgressBar progressBar, int progress, boolean fromUser) {
// 更新 TextView 中的文字和颜色
String text = String.format(Locale.getDefault(), "%d%%", progress);
SpannableStringBuilder builder = new SpannableStringBuilder(text);
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED);
builder.setSpan(colorSpan, 0, text.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
progressText.setText(builder);
// 更新进度条的进度
progressBar.setProgress(progress);
}
@Override
public void onStartTrackingTouch(ProgressBar progressBar) {
}
@Override
public void onStopTrackingTouch(ProgressBar progressBar) {
}
});
```
在 onProgressChanged 回调方法中,首先根据进度值更新 TextView 中的文字,将文字格式化为带百分号的字符串,并使用 SpannableStringBuilder 设置颜色。然后再通过 setText 方法将格式化后的文字设置到 TextView 中。
最后,再更新进度条的进度值即可。
阅读全文