内容区域中的进度条

时间:2015-03-27 15:16:58

标签: android android-fragments progress-bar

我使用this“方法”来创建进度条。它工作直到我不使用碎片。

现在我使用片段,material drawer和WebView(当然在片段中)。我创建了进度条,但它显示在屏幕顶部。

这是我的代码:

进度条:

progressBarLoad = new ProgressBar(getActivity().getBaseContext(), null, android.R.attr.progressBarStyleHorizontal);
        progressBarLoad.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 24));
        progressBarLoad.setProgress(100);
        progressBarLoad.setProgressDrawable(getResources().getDrawable(R.drawable.progress_horizontal_holo_light));
        FrameLayout decorView = (FrameLayout) getActivity().getWindow().getDecorView();
        decorView.addView(progressBarLoad);
        ViewTreeObserver observer = progressBarLoad.getViewTreeObserver();
        observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                progressBarLoad.setY(Main.getActionBarSize() + (float) Math.ceil(25 * getResources().getDisplayMetrics().density) - 10);

                ViewTreeObserver observer = progressBarLoad.getViewTreeObserver();
                observer.removeOnGlobalLayoutListener(this);
            }
        }); 

主要布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Main.Main">

    <android.support.v7.widget.Toolbar
        android:id="@+id/Toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/green"
        app:popupTheme="@style/Theme.AppCompat"
        app:theme="@style/ToolbarTheme" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/frameLayout" />

</LinearLayout>

最后是webView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/SwipeContainer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <WebView
            android:id="@+id/WebViewMain"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>

这里有截图: shows the progressbar shows the progressbar in the top of the screen

所以,问题是,如何将此进度条添加到内容屏幕?不是整个设备屏幕。

3 个答案:

答案 0 :(得分:0)

尝试在添加片段后,将进度条添加到活动的框架布局中,而不是装饰视图。

答案 1 :(得分:0)

你可以把它放在XML中,这是最简单的方法。

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Main.Main">

<android.support.v7.widget.Toolbar
    android:id="@+id/Toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/green"
    app:popupTheme="@style/Theme.AppCompat"
    app:theme="@style/ToolbarTheme"/>

<ProgressBar
    android:id="@+id/progressBar"
    android:layout_below="@+id/Toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<FrameLayout
    android:layout_below="@+id/progressBar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/frameLayout"/>

</RelativeLayout>

或者您可以将进度条放在您膨胀的布局中。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <android.support.v4.widget.SwipeRefreshLayout
        android:layout_below="@+id/progressBar"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/SwipeContainer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <WebView
            android:id="@+id/WebViewMain"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>
    </android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>

答案 2 :(得分:0)

所以,首先要感谢所有答案。我尝试了很多东西,搜索了很多,但我一无所获。然后......我突然想起如果我在相对布局中放置一些对象/布局,它们将成为屏幕的顶部。所以我在开始时做错了。我把进度条放在相对布局的顶部 - &gt;这就是为什么我没有看到。所以我把相对布局的底部和woala放在一起!它有效...但是等不正确..

为什么呢?因为我再次添加了工具栏大小,当然还有编程。条形图从工具栏上方大约40px以上。所以我想出来了,现在有了这个代码,它可以在任何屏幕上运行:

progressBarLoad = (ProgressBar) view.findViewById(R.id.progressBar);
            progressBarLoad.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 24));
            progressBarLoad.setProgress(100);
            progressBarLoad.setProgressDrawable(getResources().getDrawable(R.drawable.progress_horizontal_holo_light));
            ViewTreeObserver observer = progressBarLoad.getViewTreeObserver();
            observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    //THIS IS IMPORTANT 
                    progressBarLoad.setY(((float) Math.ceil(12.5*getResources().getDisplayMetrics().density)-38));
                    ViewTreeObserver observer = progressBarLoad.getViewTreeObserver();
                    observer.removeOnGlobalLayoutListener(this);
                }
            });