我在 recyclerview 中使用 WebView 打开嵌入式 YouTube 播放器。但是当用户滚动页面时,webview 捕捉到长触摸并打开上下文菜单。
我的回收站xml项目-
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="194dp"
app:cardCornerRadius="5dp"
app:cardElevation="0dp">
<WebView
android:id="@+id/video"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="9dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/tv_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_400"
android:text="@{item.header}"
android:textColor="@color/blueClear"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:fontFamily="@font/roboto_500"
android:text="@{item.name}"
android:textColor="@color/black"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:fontFamily="@font/roboto_400"
android:text="@{item.date}"
android:textColor="@color/greySquirrel"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:id="@+id/favorite_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="5dp"
app:isFavorite="@{item.isFavorite()}" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
我在适配器中的绑定方法-
override fun bind() {
val item = getItem(bindingAdapterPosition)
binding.item = item
val context = binding.root.context
val myUserAgent =
context.getString(R.string.youtube_userAgent)
val url = context.getString(R.string.base_youtube_link, item.id)
binding.video.webViewClient = WebViewClientYoutube()
binding.video.webChromeClient = WebChromeClientYoutube(url)
binding.video.settings.userAgentString = myUserAgent
binding.video.settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
binding.video.settings.javaScriptCanOpenWindowsAutomatically = true
binding.video.loadUrl(url)
binding.video.settings.javaScriptEnabled = true
}
如何禁用上下文菜单或跳过长按?
我试图覆盖 WebViewClient 中的方法以捕获和禁用上下文菜单打开。尝试覆盖 onTouch 方法以解除长按,但这不起作用。 也许我做错了什么 OnTouchEvent-
override fun onTouchEvent(event: MotionEvent): Boolean {
return if ((SystemClock.uptimeMillis()- event.downTime) > 200)
false
else
super.onTouchEvent(event)
}