Android 如何在加载时正确显示Webview的ProgressBar

Android 如何在加载时正确显示Webview的ProgressBar,android,android-layout,webview,Android,Android Layout,Webview,我不想表明我的webview正在以某种方式加载。使用Progressbar似乎是一个很好的解决方案,但我不确定如何正确地做到这一点。 我所说的Progressbar是指安卓系统中旋转的东西 这是我现在知道的,也是我尝试过的: 我知道onPageStarted(…)和onPageFinished(…)回调,您可以在WebViewClient中定义它们,然后根据对这些方法的调用隐藏或显示Progressbar。但是这种方法在webview中的HTML页面上产生了许多问题。例如,当我隐藏Progres

我不想表明我的webview正在以某种方式加载。使用Progressbar似乎是一个很好的解决方案,但我不确定如何正确地做到这一点。 我所说的Progressbar是指安卓系统中旋转的东西

这是我现在知道的,也是我尝试过的: 我知道onPageStarted(…)和onPageFinished(…)回调,您可以在WebViewClient中定义它们,然后根据对这些方法的调用隐藏或显示Progressbar。但是这种方法在webview中的HTML页面上产生了许多问题。例如,当我隐藏Progressbar时,HTML元素会在短时间内调整大小并返回到其原始大小。这看起来很难看,我不知道为什么会这样。我试着把Progressbar和webview放在框架和相对布局中(为了让进度慢下来),这两个我都遇到了上面的问题。HTML页面加载非常繁重,因为上面有库,但我怀疑这是库的问题,因为在手机上的浏览器应用程序中打开相同的页面加载时没有奇怪的行为

我的主要问题是,我不知道如何定义包含Progressbar和webview的布局,以及如何避免奇怪的放大/缩小跳转。这就是为什么我要问如何在webview上正确显示进度条

编辑: 这是我尝试过的布局之一:

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

<WebView
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

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

</FrameLayout>


它或多或少与相对布局类似,但我在ProgressBar的两个轴上都使用centerInPerent=true。FrameLayout设计用于在屏幕上屏蔽一个区域以显示单个项目。通常,FrameLayout应用于保存单个子视图

我会使用相对论:

<?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="match_parent">

<WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

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

</RelativeLayout>


这应该是有效的…

有一种有效的方式来显示活动的进度。如果您使用的是
操作栏
,则 您可以设置不确定的进度条(旋转的进度条)或水平进度条(如Chrome等web浏览器所示)。为此,必须将窗口功能设置为适当的值,如:

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

要设置进度值,请执行以下操作:

setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
然后,在需要更改进度值时调用
setProgress(int)

可以使用控制进度条的可见性

setProgressBarIndeterminateVisibility(true); //sets it to visible


你能发布你的布局xml吗?几分钟后会在编辑中添加它。查看编辑。感谢您提供有关此其他方法的信息。不幸的是,我不能在当前项目中使用它,但它可能会在将来找到它的位置。感谢您提供的信息。FrameLayout不是建议使用分层布局(一个元素多于另一个元素)的方法吗?您展示的这个相对布局正是我尝试过的另一个布局,但它也给了我奇怪的放大/缩小错误。我应该如何在这个布局中隐藏ProgressBar,使用GONE或INVISIBLE?我尝试了这两种方法,但仍然遇到缩放错误,但可能遗漏了什么?
setProgressBarIndeterminateVisibility(true); //sets it to visible
setProgressBarIndeterminateVisibility(false); //hides the progressbar