部分屏幕上的进度对话框

Progress Dialog over partial screen

我有一个包含三个选项卡的片段。在其中一个选项卡上,我有一个对话框,该对话框在后台同步进行时旋转。但是当后台同步进行时,我需要能够继续处理其他部分。

我目前正在使用 dialog.setCancelable(false) 退出对话框,以便我可以使用应用程序的其余部分。但这在正在进行同步的片段上给了我一个情绪化的屏幕。

有没有办法让对话框只覆盖部分屏幕(只覆盖正在进行同步的片段)?换句话说,对话框不会占据整个屏幕,这样我就可以在不取消对话框的情况下移动到其他选项卡?

java 代码中对话框的实现:

    dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_PROGRESS);
    dialog.setCancelable(true);
    dialog.setContentView(R.layout.dialog_progress_bar);
    dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

dialog.xml:

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

    <ProgressBar
        android:id="@+id/dialogProgressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>

</LinearLayout>

不, 你无法通过 Dialog 实现此行为。

#. 由于您正在使用 Fragment 并希望显示 progress 同步,因此我认为您可以添加一个 ProgressBar在您的 Fragment layout XML 中,而不是根据 sync 状态使用 Dialog 和 show/hide ProgressBar

状态:

  1. 当同步为 going on 时,仅显示 ProgressBar 并隐藏其他 Views
  2. 同步 completed 时,根据您的需要隐藏 ProgressBar 并显示其他人 Views

#. 你也可以在你的 Fragment layout XML 中使用 SwipeRefreshLayout 来表示进度正在进行中。当sync进行时,它会show一个循环ProgressBar,当sync完成时,它会自动hide

这里有一个很好的教程:Android Swipe Down to Refresh ListView Tutorial

希望对你有所帮助~