我必须在onPreExcecute()
中设置消息和标题,但我无法执行此操作。 ProgressDialog
使用setMessage()
方法,但ProgressBar
没有。
protected void onPreExecute() {
progressBar.
super.onPreExecute();
}
答案 0 :(得分:0)
使用ProgressBar显示进度,使用TextView显示消息:
<ProgressBar
android:id="@+id/indeterminateBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
答案 1 :(得分:0)
创建自己的ProgressBar并在其旁边放置Textview。来自https://github.com/Q115/DelayedProgressDialog的图书馆可以解决问题。
用法:
DelayedProgressDialog progressDialog = new DelayedProgressDialog();
progressDialog.show(getSupportFragmentManager(), "tag");
答案 2 :(得分:0)
扩展DialogFragment后,可以通过覆盖onCreateDialog来使用AlertDialog。您应该设计一个包含ProgressBar和TextView(用于消息)的xml。然后在xml上调用AlertDialog的setView()方法,如下所示。
您在xml中的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/indeterminateBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/progress_bar_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="loading..."
/>
</LinearLayout>
您的DialogFragment类
public class Dialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new
AlertDialog.Builder(getActivity());
//use layoutinflater to inflate xml
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.xml_containing_progressbar,null));
return builder.create();
}
}
现在可以在DialogFragment类的实例上调用.show
Dialog dialog = new Dialog();
dialog.show(getSupportFragmentManager(), "tag");
答案 3 :(得分:0)
我知道已经晚了,但是总比没有好... 我遇到了同样的问题,所以我创建了一个自定义的ProgressBar。
首先,为视图创建类:
public class CustomProgressBar extends RelativeLayout {
private ProgressBar progressBar;
private TextView textView;
public CustomProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.custom_progress_bar, this);
progressBar = findViewById(R.id.progressBarCustom);
textView = findViewById(R.id.pbTV);
init(attrs);
private void init(@Nullable AttributeSet attrs) {
if (attrs != null) {
TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.CustomProgressBar);
String textAttrib = ta
.getString(R.styleable.CustomProgressBar_text);
textView.setText(textAttrib);
ta.recycle();
}
}
public void setProgressBar(ProgressBar progressBar) {
this.progressBar = progressBar;
}
public String getText() {
return textView.getText().toString();
}
public void setText(String text) {
textView.setText(text);
}
public void setText(int resid) {
textView.setText(resid);
}
}
然后,为了能够从布局中设置此类属性,我们需要使其具有样式。因此,您需要在“值”目录中创建一个名为“ attrs.xml”的xml文件。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomProgressBar">
<attr name="text" format="string"/>
</declare-styleable>
</resources>
现在,我们为自定义视图创建布局:
<?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="wrap_content">
<ProgressBar
android:id="@+id/progressBarCustom"
style="?android:attr/progressBarStyle"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerInParent="true"/>
<TextView
android:id="@+id/pbTV"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"/>
</RelativeLayout>
最后,随便使用它吧:
<com.example.mypackage.CustomProgressBar
android:id="@+id/radioGroupProgressBar"
android:layout_width="match_parent"
android:layout_height="150dp"
app:text="Loading..."
android:layout_gravity="center_horizontal"
/>
就这样:)