如何将焦点从RowsSupportFragment的行移至下一个布局组件?

时间:2019-10-11 03:22:05

标签: android android-layout android-constraintlayout android-tv leanback

我正在使用Android Leanback库来创建电视应用程序。我的布局会放大Fragment(即RowsSupportFragment),在其下方有一个按钮。因此,当我到达最后一个项目焦点后向下滚动到RowsSupportFragment中的项目列表时,不会转到按钮。 我已经尝试设置focusable(true),nextFocusDown(buttonId)等。

我可以看到RowsSupportFragment在内部使用VerticalGridView来填充项目列表。

有人对此有任何想法吗?

这是我的布局:

<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<FrameLayout
android:id="@+id/listviewFragmentId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:duplicateParentState="true"
android:nextFocusDown="@id/nextButtonId"
android:nextFocusForward="@id/nextButtonId" 
layout_constraintBottom_toTopOf="@id/nextButtonId"/>

<Button
android:id="@+id/nextButtonId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:duplicateParentState="true"
android:focusable="true"
android:text="Hello Next"/>

<// other items>
</android.support.constraint.ConstraintLayout>

注意: 如果我向左/向右对齐按钮,焦点将正常工作。

3 个答案:

答案 0 :(得分:0)

就我而言,当我需要关注任何视图时,这是可行的

view.requestFocus();

答案 1 :(得分:0)

尝试将以下属性添加到Button

android:focusableInTouchMode="true"

并从FrameLayout中删除以下属性

android:nextFocusDown="@id/midPanel"
android:nextFocusForward="@id/midPanel"

答案 2 :(得分:0)

就我而言,我需要关注RowSupportFragment项外部的任何视图,因此使用focusOutEnd,focusOutFront和Leanback Style中的其他焦点功能解决了我的解决方案。 就像从RowSupportFragment请求将焦点放在外部Button小部件上一样,设置<item name="focusOutEnd">true</item>的样式对我有用。