1

我正在尝试做一个概念验证,其中 Webview 加载本地 HTML 文件,用户可以向左/向右滑动以转到下一个文件,同时全屏显示。我正在使用 ViewPager2 和普通的 Webviews。我有这部分工作,但我想做的是,在用户单击时,显示或隐藏工具栏、状态栏和导航控件。现在我在 viewPager 上有 setOnTouchListener 代码,但看起来触摸事件正在被 webview 消耗。

如何在不中断 ViewPager 分页和在 web 视图中长按的情况下完成单击即可在全屏和非全屏模式之间切换的位置?

这是我的大部分代码。为简洁起见,我将不相关的部分省略。

class MyActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_my)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)

        viewPager.setOnTouchListener { _, event ->
            when(event.action) {
                MotionEvent.ACTION_DOWN -> {
                    initialX = event.rawX
                    initialY = event.rawY
                    moved = false
                }

                MotionEvent.ACTION_MOVE -> {
                    if (event.rawX != initialX || event.rawY != initialY) {
                        moved = true
                    }
                }

                MotionEvent.ACTION_UP -> {
                    if (!moved) {
                        toggle()
                    }
                }
            }
            true
        }

        viewPager.adapter = MyAdapter(items, this)
    }
}
class MyAdapter(private val items: List<String>) : RecyclerView.Adapter<MyViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.view_pager_item, parent, false) as WebView
        return MyViewHolder(view, items)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.bind(position)
    }

    override fun getItemCount(): Int {
        return items.size
    }
}

class MyViewHolder (private val webView: WebView, private val items: List<String>) :
    RecyclerView.ViewHolder(webView) {
    internal fun bind(position: Int) {
        webView.loadUrl("file://" + items[position])
    }
}
4

0 回答 0