显示ProgressBar时,仍然可以单击后台中的WebView

时间:2015-02-19 17:10:33

标签: java android webview

我的android webView应用程序运行良好。它还会在加载url时显示ProgressBar,并在完成加载时隐藏它并具有漂亮的效果,因为我在ProgressBar布局中放置了一些alpha以在后台查看webView。我跟着this example.

我的问题是:webView仍然可以点击。

MyManifest.xml:我认为我需要所有权限......

<uses-sdk
    android:minSdkVersion="16"
    android:targetSdkVersion="21" />

main_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/mainLayout"
    tools:context="com.siconet.axa.MainActivity" >

    <RelativeLayout
        android:id="@+id/loadingPanel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" >

        <ProgressBar
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_centerInParent="true"
            android:indeterminate="true" />

    </RelativeLayout>

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

然后我在客户端显示/隐藏进度条,我需要避免单击webView:

webViewClient.java

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) 
{
    loadingFinished = false;

    // this works like charm
    activity.findViewById(R.id.loadingPanel).setVisibility(View.VISIBLE);
    activity.findViewById(R.id.webView).setAlpha(0.3f);

    // this is not working :(
    activity.findViewById(R.id.loadingPanel).setClickable(true);
    activity.findViewById(R.id.webView).setClickable(false);

    super.onPageStarted(view, url, favicon);
}


@Override
public void onPageFinished(WebView view, String url) 
{
    // control of the loading options....
    if (loadingFinished && !redirect) {
        activity.findViewById(R.id.loadingPanel).setVisibility(View.GONE);
        activity.findViewById(R.id.webView).setAlpha(1f);

        // not working again :(
        activity.findViewById(R.id.loadingPanel).setClickable(false);
        activity.findViewById(R.id.webView).setClickable(true);
    }
}

我也尝试过requestFocus():

activity.findViewById(R.id.loadingPanel).requestFocus();

在视图中添加侦听器:

mWebView.setOnTouchListener(new OnTouchListener() { // declare listener...

知道为什么会发生这种情况???

2 个答案:

答案 0 :(得分:0)

将此属性添加到XML中的ProgressBar元素:

android:clickable="true"

答案 1 :(得分:0)

将您的RelativeLayoutProgressBar View父级)属性更改为:

<RelativeLayout
    android:id="@+id/loadingPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:layout_centerInParent="true" >

这将使您的RelativeLayout覆盖整个布局(不仅仅是100dpx100dp)并在可见时接收点击次数。