如何创建自定义进度条

3

编辑:
问题1已解决。但是我仍然无法更改ProgressBarcolor。我尝试使用自己的theme(见下面的代码)。

我想让我的ProgressBar看起来像下面的图片。我已经在我的ListView上方创建了一个ProgressBar。我在一个RelativeLayout中使用ListViewProgressBar和两个TextViews

我的问题:

1.) 如何按照下面所示的方式对齐ProgressBar上方的TextViews
2.) 如何设置ProgressBar本身的颜色和ProgressBar的背景颜色?

enter image description here

MainActivity.xml

   <ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/progressBarText"
    android:progress="0"
    android:max="100"
    android:paddingTop="0dp"
    android:paddingBottom="10dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:theme="@style/progressBarTheme"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"/>

styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@android:color/holo_green_dark</item>
</style>

<style name="progressBarTheme" parent="@style/Theme.AppCompat">
    <item name="colorAccent">@color/myRedColor</item>
</style>

</resources>

2
那将是一个复合视图。 - Linxy
3个回答

1

1.) 如何将TextView与ProgressBar按照下面的方式对齐?

尝试以下代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal">

    <ProgressBar
        android:id="@+id/progressCircle"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

    <TextView
        android:id="@+id/txtvStatusCircle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/progressCircle"
        android:layout_alignParentStart="true"
        android:text="Daily Progress"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/txtPercent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/progressCircle"
        android:layout_alignParentEnd="true"
        android:text="0 %"
        android:textSize="18sp" />

</RelativeLayout>

2.) 我该如何设置ProgressBar本身的颜色和ProgressBar的背景颜色?

在styles.xml文件中:

<style name="progressBarBlue" parent="@style/Theme.AppCompat">
        <item name="colorAccent">@color/myBlueColor</item>
</style>

然后在xml中将其设置为ProgressBar主题:
<ProgressBar
    ...
    android:theme="@style/progressBarBlue" />

关于 ProgressBar 本身,无论您在样式中选择什么 AccentColor,都将设置为 ProgressBar 的颜色。因此,更改以下内容的颜色:
<item name="colorAccent">@color/colorAccent/item>

会起作用的。

输出:

enter image description here


谢谢 :) 我明天要试一下。 - Jan Meyer
如何添加第二个TextView以显示百分比到右侧?它与我的另一个TextView重叠了。 - Jan Meyer
1
请检查我的更新答案。我刚刚在另一个TextView中添加了: android:layout_alignParentEnd="true"。 :) - ʍѳђઽ૯ท
TextView已经正确对齐,但ProgressBar的颜色没有改变。 - Jan Meyer
1
你在styles.xml中使用或更改了AccentColor吗?不过你也可以尝试使用这个答案:https://dev59.com/xHI-5IYBdhLWcg3wFkOO#52481132 - ʍѳђઽ૯ท
显示剩余4条评论

1

try this:

<android.support.constraint.ConstraintLayout
            android:id="@+id/uplaodFile"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/upload"
            android:layout_marginTop="10dp"
            >

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="46dp"
                android:layout_height="65dp"
                android:src="@drawable/file_image"
                app:layout_constraintEnd_toStartOf="@+id/horizontal_progress_bar"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="@+id/notification" />

            <TextView
                android:id="@+id/notification"
                android:layout_width="282dp"
                android:layout_height="22dp"
                android:layout_marginBottom="2dp"
                android:text="File Detail"
                app:layout_constraintBottom_toTopOf="@+id/cancel"
                app:layout_constraintStart_toStartOf="@+id/horizontal_progress_bar"
                app:layout_constraintTop_toTopOf="parent"
                tools:ignore="MissingConstraints" />

            <ProgressBar
                android:id="@+id/horizontal_progress_bar"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="201dp"
                android:layout_height="26dp"
                android:layout_marginEnd="8dp"
                android:layout_marginTop="24dp"
                android:indeterminate="false"
                android:max="100"
                android:minHeight="100dp"
                android:progress="2"
                android:progressBackgroundTint="#aaaaaa"
                app:layout_constraintEnd_toStartOf="@+id/cancel"
                app:layout_constraintTop_toTopOf="parent"
                tools:ignore="MissingConstraints" />

            <TextView
                android:id="@+id/process_state"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                android:layout_marginEnd="8dp"
                android:layout_marginStart="8dp"
                android:layout_marginTop="40dp"
                android:text="uploading.. 10%"
                android:textAlignment="center"
                android:textColor="#4B74FF"
                android:textSize="10dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.833"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                tools:ignore="MissingConstraints" />

            <ImageView
                android:id="@+id/cancel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="36dp"
                android:layout_marginEnd="10dp"
                android:src="@drawable/ic_close_black_24dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                tools:ignore="MissingConstraints" />


        </android.support.constraint.ConstraintLayout>

这是Java代码。
ProgressBar progressBar;

process_status = findViewById(R.id.process_state);
progressBar = findViewById(R.id.horizontal_progress_bar);
progressBar.setProgressTintList(ColorStateList.valueOf(Color.parseColor("#4B74FF")));
progressBar.setProgress(currentProgress);
textView.setText("Uploading..."+currentProgress+ "%");

setProgressTintList需要API 21级。我的设备只有API 19。 - Jan Meyer
1
尝试这个:https://dev59.com/VVgQ5IYBdhLWcg3wIQdB 希望对你有所帮助。 - chetan mahajan

1
这改变了进度条的颜色。
progressBar.getProgressDrawable().setColorFilter(
Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接