0

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

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

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

MyViewPager2在 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 和/或游戏控制器时,我错过了什么?

4

1 回答 1

2

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

要捕捉点击添加onClickListener到所需的视图。

于 2021-01-20T06:51:23.830 回答