【发布时间】:2021-12-16 19:01:21
【问题描述】:
我有一个自定义 ProgressBar:
drawable/circle.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="ring"
android:thicknessRatio="16"
android:useLevel="false">
<solid android:color="#DDD" />
</shape>
</item>
<item>
<rotate
android:fromDegrees="270"
android:toDegrees="270">
<shape
android:shape="ring"
android:thicknessRatio="16"
android:useLevel="true">
<gradient
android:endColor="#00101f"
android:startColor="#0078ff"
android:type="sweep" />
</shape>
</rotate>
</item>
</layer-list>
values/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Widget.App.CustomProgressBar" parent="Widget.AppCompat.ProgressBar">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@drawable/circle</item>
</style>
</resources>
layout/custom_progress_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ProgressBar
android:id="@+id/customProgressBar"
style="@style/Widget.App.CustomProgressBar"
android:layout_width="200dp"
android:layout_height="200dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:progress="0"
android:min="0"
android:max="100"
/>
<TextView
android:id="@+id/textViewProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintBottom_toBottomOf="@+id/customProgressBar"
app:layout_constraintEnd_toEndOf="@+id/customProgressBar"
app:layout_constraintStart_toStartOf="@+id/customProgressBar"
app:layout_constraintTop_toTopOf="@+id/customProgressBar"
android:text="0 %"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
我希望它在后台加载一些数据时显示在活动之上。我试过这个:
ProgressBar progressBar;
public class LoadData extends AsyncTask
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
progressBar = new ProgressBar(MyActivity.this, null, 0, R.layout.custom_progress_bar);
//MyActivity uses ConstraintLayout
ConstraintLayout cl = findViewById(R.id.constraintLayout);
ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.WRAP_CONTENT,
ConstraintLayout.LayoutParams.WRAP_CONTENT
);
progressBar.setLayoutParams(lp);
progressBar.setVisibility(View.VISIBLE);
cl.addView(progressBar);
}
@Override
protected Object doInBackground(Object[] objects)
{
//load some data here
}
@Override
protected void onPostExecute(Object o)
{
progressBar.setVisibility(View.GONE);
}
}
但是,它不起作用 - 后台任务正在执行,但没有显示 ProgressBar。如何使用 AsyncTask 在活动顶部显示我的 ProgressBar?
【问题讨论】:
-
progressBar.show(); ?
-
@blackapps 没有用
-
您将自定义布局用于新的进度条。但是您的布局已经包含一个进度条。在tutlane.com/tutorial/android/android-progressbar-with-examples 中,您的自定义布局用作活动的布局。
-
您还可以构建一个自定义类扩展 ProgressBar。
标签: java android xml android-asynctask android-progressbar