如何使用Dpad/游戏控制器选择并点击Android ViewPager2的子视图



我正在研究我当前Android项目中的蓝牙Dpad和游戏控制器。

我可以成功地在我的应用程序中选择并点击我的所有UI宽度。

但是,我有一个ViewPager2,它包含多个片段,并且我无法选择或单击任何fragments小部件。

我的ViewPager2在XML中定义如下:-

<androidx.viewpager2.widget.ViewPager2
android:id="@+id/dashboard_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/dashboard_dots"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:padding="2dp"
app:tabBackground="@drawable/dot_selector"
app:tabGravity="center"
app:tabIndicatorHeight="0dp" />

在我的主要活动中,我配置ViewPager2如下:-

viewPager = findViewById(R.id.dashboard_pager)
val pagerAdapter = ScreenSlidePagerAdapter(this@DashboardActivity)
viewPager.adapter = pagerAdapter
val tabLayout = findViewById<TabLayout>(R.id.dashboard_dots)
TabLayoutMediator(tabLayout, viewPager) { _, _ -> }.attach()

我的适配器是:-

private inner class ScreenSlidePagerAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) {
override fun getItemCount(): Int = NUM_PAGES
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> DashboardClockFragment()
1 -> DashboardSpeedometerFragment()
2 -> DashboardTimerFragment()
else -> DashboardTimerFragment()
}
}
}

DashboardClockFragment布局XML类似于以下内容:-

<FrameLayout
android:id="@+id/dashboard_clock_wrapped"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center_vertical"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground">
<TextClock
android:id="@+id/dashboard_clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:fontFamily="@font/lcd_digital"
android:format12Hour="kk:mm:ss"
android:format24Hour="kk:mm:ss"
android:gravity="center"
android:padding="10dp"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/speed_limit_text_size" />
<TextView
android:id="@+id/dashboard_clock_paused"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:fontFamily="@font/lcd_digital"
android:gravity="center"
android:padding="10dp"
android:text="@string/start_time"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/speed_limit_text_size"
android:textStyle="bold"
android:visibility="gone" />
</FrameLayout>

我无法使用Dpad控制器在布局中选择TextClock或TextView。

在触摸模式下,我可以点击儿童视图,一切都如所愿。

在配置布局以对Dpad和/或游戏控制器做出反应时,我错过了什么?

尝试将android:focusableInTouchMode="true"android:focusable="true"一起添加到您希望在页面上选择的视图中。

要捕捉单击,请将onClickListener添加到所需视图中。

相关内容

  • 没有找到相关文章

最新更新