android 显示加载/进度指示器的最佳方式?

b1payxdu  于 2023-10-14  发布在  Android
关注(0)|答案(6)|浏览(141)

在应用等待服务器响应时,显示加载微调器的最佳方式是什么?
这可以通过编程实现吗?这样我就不必在xml文件中添加加载微调器了?

rkue9o1l

rkue9o1l1#

ProgressDialog已从Android Oreo弃用。使用ProgressBar代替

ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
progress.show();
// To dismiss the dialog
progress.dismiss();

ProgressDialog.show(this, "Loading", "Wait while loading...");

Read more here.
顺便说一下,Spinner在Android中有不同的含义。(类似于HTML中的select命令)

ttvkxqim

ttvkxqim2#

ProgressDialog自API Level 26 https://developer.android.com/reference/android/app/ProgressDialog.html起已弃用
我在布局中包含一个ProgressBar

<ProgressBar
        android:layout_weight="1"
        android:id="@+id/progressBar_cyclic"
        android:visibility="gone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="40dp"
        android:minWidth="40dp" />

并将其可见性更改为.GONE|可视性取决于用例。

progressBar_cyclic.visibility = View.VISIBLE
3pvhb19x

3pvhb19x3#

使用ProgressDialog

ProgressDialog.show(Context context, CharSequence title, CharSequence message);

然而,这被认为是今天(2013年)的反模式:http://www.youtube.com/watch?v=pEGWcMTxs3I

ncecgwcz

ncecgwcz4#

实际上,如果你正在等待来自服务器的响应,它应该以图解方式完成。你可以创建一个进度对话框然后关闭它,但这不是“android的方式”。
目前推荐的方法是使用一个
DialogFragment**:

public class MySpinnerDialog extends DialogFragment {

    public MySpinnerDialog() {
        // use empty constructors. If something is needed use onCreate's
    }

    @Override
    public Dialog onCreateDialog(final Bundle savedInstanceState) {

        _dialog = new ProgressDialog(getActivity());
        this.setStyle(STYLE_NO_TITLE, getTheme()); // You can use styles or inflate a view
        _dialog.setMessage("Spinning.."); // set your messages if not inflated from XML

        _dialog.setCancelable(false);  

        return _dialog;
    }
}

然后在Activity中设置Fragment manager,并在等待服务器开始后显示对话框:

FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");

一旦你的服务器响应完成,你将关闭它:

myInstance.dismiss()

请记住,进度对话框是一个微调器或进度条,具体取决于属性,请在api guide上阅读更多信息

ecfdbz9o

ecfdbz9o5#

这就是我如何做到这一点,只有一个进度对话框可以在同一时间打开。根据Suraj Bajaj的回答

private ProgressDialog progress;


public void showLoadingDialog() {

    if (progress == null) {
        progress = new ProgressDialog(this);
        progress.setTitle(getString(R.string.loading_title));
        progress.setMessage(getString(R.string.loading_message));
    }
    progress.show();
}

public void dismissLoadingDialog() {

    if (progress != null && progress.isShowing()) {
        progress.dismiss();
    }
}

我还不得不使用

protected void onResume() {
    dismissLoadingDialog();
    super.onResume();
}
8oomwypt

8oomwypt6#

下面是Java中唯一的一个版本“如何创建一个进度对话框,因为我们喜欢的ProgressDialog已被弃用”:
注意:使用Android 33。

private AlertDialog progressAlertDialog = createProgressDialog(currentActivity / this);

    private AlertDialog createProgressDialog(AppCompatActivity currentActivity) {
        LinearLayout vLayout = new LinearLayout(currentActivity);
        vLayout.setOrientation(LinearLayout.VERTICAL);
        vLayout.setPadding(50, 50, 50, 50);
        vLayout.addView(new ProgressBar(currentActivity, null, android.R.attr.progressBarStyleLarge));

        return new AlertDialog.Builder(currentActivity)
                .setCancelable(false)
                .setView(vLayout)
                .create();
    }

    public void displayProgressDialog() {
        if (!progressAlertDialog.isShowing()) {
            progressAlertDialog.show();
        }
    }

    public void hideProgressDialog() {
        progressAlertDialog.dismiss();
    }

相关问题