进度指示器后面出现白条

时间:2015-03-01 22:53:43

标签: android android-progressbar indicator

我的加载圈工作正常但后面有一个白框,如here所示。我花了几个小时寻找解决方案,我发现的所有SO帖子都提出了与我使用的实现非常相似的实现。我也尝试将自定义主题应用于对话框并设置透明度,但这没有做任何事情。我不确定白色矩形究竟是什么,因为改变ProgressBar本身的属性似乎只会影响包含图像的中心的方块。

我为在AsyncTask期间运行的进度条定义了以下布局。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@android:color/transparent" >

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminate="true"/>

</FrameLayout>

下面是我使用上面显示的布局的对话框的方法。

    public static ProgressDialog createProgressDialog(Context mContext) {
        ProgressDialog dialog = new ProgressDialog(mContext);
        try {
            dialog.show();
        } catch (WindowManager.BadTokenException e) {

        }
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.progressdialog);
        return dialog;
    }

    public class FetchAcroTask extends AsyncTask<String, Void, String[]> {

        Dialog progressDialog = null;

        @Override
        protected void onPreExecute() {

            // Display loading circle
            if (progressDialog == null) {
                progressDialog = createProgressDialog(AcroActivity.this);
                progressDialog.show();
            } else {
                progressDialog.show();
            }
        }

        @Override
        protected String[] doInBackground(String... params) {

            if (params.length == 0) {
                return null;
            }
            return GET(params[0]);
        }

        @Override
        protected void onPostExecute(String[] resultStrs) {

            if (resultStrs == null) {
                acroAdapter.add("No results were found");
            } else {
                acroAdapter.addAll(resultStrs);
            }

            // Dismiss loading circle
            progressDialog.dismiss();

        }
    }
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

由于Kostas留下的评论,我找到了解决方案。

我将我的ProgressBar声明转移到我的活动布局文件中,并在我的AsyncTask完成时隐藏它。

在我的活动的布局文件中:

<ProgressBar
    android:id="@+id/progressBar1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" />

在异步任务中:

    @Override
    protected void onPostExecute(String[] resultStrs) {

        if (resultStrs == null) {
            acroAdapter.add("No results were found");
        } else {
            acroAdapter.addAll(resultStrs);
        }

        // Dismiss loading circle
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        progressBar.setVisibility(View.INVISIBLE);
    }

谢谢。