webView.ontouch和button.onclick之间的冲突

时间:2013-01-29 19:35:58

标签: java android webview ontouchevent

我有一个webView并且webView一个button。我在webview上发现了触摸事件:webView.setOnTouchListener(this);

@Override
    public boolean onTouch(View v, MotionEvent event) {
        if (ADS_VIDEO.contains(v.getId()) && v.getId() == R.id.webView
                && event.getAction() == MotionEvent.ACTION_DOWN) {
            intentVideo = new Intent(getBaseContext(),
                    AdVideoActivity.class);
            startActivity(intentVideo);
        }
        return false;
    }

我的按钮也有这个:

 button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         webView.setVisibility(View.GONE);
         button.setVisibility(View.GONE);
        }
    });

我的问题是当我点击button时,webView的事件已启动,而不是与该按钮关联的事件。

更新:

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="match_parent"
android:layout_height="match_parent"
android:padding="0dip"
android:id="@+id/relativeForWeb" >

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:contentDescription="@string/descr_image"
     />

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

<Button
    android:id="@+id/bt"
    android:layout_width="42dip"
    android:layout_height="42dip"
    android:text="x" 
    android:background = "@drawable/roundedbutton"/>


<WebView  
    android:id="@+id/webView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

/>

</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

因为WebView位于layout.xml中的Button之后,所以它位于上面它(RelativeLayout根据它们在layout.xml中的顺序设置其视图的z顺序)。 因为webview位于按钮上方,所以它首先获取触摸事件并消耗它。

只需在layout.xml中的按钮声明之前移动webview声明,就可以了。

像这样:

<?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="match_parent"
android:layout_height="match_parent"
android:padding="0dip"
android:id="@+id/relativeForWeb" >

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:contentDescription="@string/descr_image"
     />

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

<WebView  
    android:id="@+id/webView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

/>

<Button
    android:id="@+id/bt"
    android:layout_width="42dip"
    android:layout_height="42dip"
    android:text="x" 
    android:background = "@drawable/roundedbutton"/>


</RelativeLayout>