1

I'm trying to do a proof of concept where a Webview loads local HTML files and users are able to swipe left/right to go to the next file, all while in fullscreen. I'm utilizing ViewPager2 and normal Webviews. I have that part working, but what I want to do is, upon the user doing a single tap, show or hide the toolbar, status bar and navigation controls. Right now I have the setOnTouchListener code on the viewPager, but it looks like the touch events are being consumed by the webview.

How can I accomplish where a single tap would do a toggle between fullscreen and non-fullscreen mode, without disrupting ViewPager paging and long press in the webview?

Here is most of my code. I'm leaving parts out for brevity that should not be related.

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])
    }
}
user1795832
  • 2,080
  • 8
  • 29
  • 50

0 Answers0