由于ProgressDialog现已弃用,如何通过progressBar设置消息?

时间:2017-08-17 15:24:34

标签: android

我必须在onPreExcecute()中设置消息和标题,但我无法执行此操作。 ProgressDialog使用setMessage()方法,但ProgressBar没有。

 protected void onPreExecute() {


progressBar.



    super.onPreExecute();
}

4 个答案:

答案 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");

来源:https://developer.android.com/guide/topics/ui/dialogs

答案 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"
        />

就这样:)