Button is not Visible in the front of WebView (API 19 and among them)

Button is not Visible in front of WebView (API 19 and among them)

我有一个 WebView,前面有一个 Button。该按钮在外部浏览器中打开 url,它在 Android API 21 及更高版本中工作起来就像一个魅力。但我也在 API 16 中进行测试以覆盖更多设备。 在 API API 19 及以下版本中,按钮未出现,在它们上方按钮可见且有效。 按钮仅在 WebView 获得 url 时可见。在此之前,按钮是不可见的。

my relevant Java code is:

public void launchWebViewByURL(String url)
    {
        showSpinner();
        Button browserButton = (Button) fragmentView.findViewById(R.id.WebViewButton);
        browserButton.setVisibility(View.VISIBLE);
        webView.loadUrl(url);
    }

my relevant XMK is

<RelativeLayout
        android:id="@+id/WebViewLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_above="@+id/statusIndicators"
        android:layout_below="@+id/statusIndicatorTop">

        <Button
            android:id="@+id/WebViewButton"
            android:text="@string/webViewButton"
            android:layout_width="80dp"
            android:layout_height="50dp"
            android:textSize="7dp"
            android:alpha="0.7"
            android:visibility="invisible"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_marginRight="5dp"
            android:layout_marginBottom="5dp" />

        <WebView
            android:id="@+id/WebView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:requiresFadingEdge="vertical"
            android:fadingEdgeLength="16dp"
            android:background="@color/colorPrimary"
            android:overScrollMode="ifContentScrolls"
            android:layout_alignParentRight="true"
            android:layout_alignParentLeft="true"
            android:visibility="visible" />


        <RelativeLayout
            android:id="@+id/WebViewOverlay"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/black"
            android:visibility="invisible"
            android:alpha="0.5">

            <com.pnikosis.materialishprogress.ProgressWheel
                android:id="@+id/ProgressWheel"
                android:layout_width="@dimen/spinner_dimen"
                android:layout_height="@dimen/spinner_dimen"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                wheel:matProg_barColor="@color/colorAccent"
                wheel:matProg_circleRadius="@dimen/spinner_dimen"
                wheel:matProg_barWidth="@dimen/spinner_breadth"
                wheel:matProg_progressIndeterminate="true"
                />

        </RelativeLayout>

    </RelativeLayout>

当WebView像Button一样有Alpha时,Button可见但不可触摸。 当 WebView 不可见时,将显示 Button 并正常工作。 谁能帮我把 Button 放在 "lower" API 的前面,比如 19 岁及以下?

在相对布局中,"z" 元素的顺序由这些元素添加到相对布局的顺序定义。因此,元素在布局中越靠下,其 z 值就越高。也就是说,将 WebViewButton 移动到布局的底部,使其位于 webview 上方。

   try for this


    <Button
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Enter"
              android:id="@+id/WebViewButton"
               />

           <WebView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:id="@+id/webView"
              android:layout_below="@+id/WebViewButton"
              android:layout_alignParentLeft="true"
              android:layout_alignParentStart="true"
              android:layout_alignParentRight="true"
              android:layout_alignParentEnd="true"
              android:layout_alignParentBottom="true" />
 <RelativeLayout
        android:id="@+id/WebViewLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
       >



        <WebView
            android:id="@+id/WebView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:requiresFadingEdge="vertical"
            android:fadingEdgeLength="16dp"
            android:background="@color/colorPrimary"
            android:overScrollMode="ifContentScrolls"
            android:layout_alignParentRight="true"
            android:layout_alignParentLeft="true"
            android:visibility="visible" />


        <Button
            android:id="@+id/WebViewButton"
            android:text="gfjhfgj"
            android:layout_width="80dp"
            android:layout_height="50dp"
            android:textSize="7dp"
            android:alpha="0.7"
            android:visibility="visible"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_marginRight="5dp"
            android:layout_marginBottom="5dp" />

    </RelativeLayout>

按钮不听触摸的原因是因为它被 WebView 消耗,因为 WebView 在您的 Button 前面。当您更改 WebView 的 alpha 时,它仍然在 ViewGroup 中绘制(在您的情况下是 RelativeLayout),并且正在消耗其范围内的所有触摸事件。因此,您的解决方案是将 Button 放在前面。可能会考虑阅读 RelativeLayout 的文档以了解其工作原理。

下面的代码应该可以工作

<RelativeLayout
    android:id="@+id/WebViewLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/statusIndicators"
    android:layout_below="@+id/statusIndicatorTop">

    <WebView
        android:id="@+id/WebView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorPrimary"
        android:fadingEdgeLength="16dp"
        android:overScrollMode="ifContentScrolls"
        android:requiresFadingEdge="vertical"
        android:visibility="visible"/>

    <RelativeLayout
        android:id="@+id/WebViewOverlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:alpha="0.5"
        android:background="@android:color/black"
        android:visibility="invisible">

        <com.pnikosis.materialishprogress.ProgressWheel
            android:id="@+id/ProgressWheel"
            wheel:matProg_barColor="@color/colorAccent"
            wheel:matProg_barWidth="@dimen/spinner_breadth"
            wheel:matProg_circleRadius="@dimen/spinner_dimen"
            wheel:matProg_progressIndeterminate="true"
            android:layout_width="@dimen/spinner_dimen"
            android:layout_height="@dimen/spinner_dimen"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            />

    </RelativeLayout>

    <Button
        android:id="@+id/WebViewButton"
        android:layout_width="80dp"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="5dp"
        android:layout_marginRight="5dp"
        android:alpha="0.7"
        android:text="@string/webViewButton"
        android:textSize="7dp"
        android:visibility="invisible"/>
</RelativeLayout>

解决我坚持不渲染的按钮问题的唯一选择是:

webView.getSettings().setDomStorageEnabled(true);

我希望这对某人有所帮助。