gpt4 book ai didi

focus - Android TV 在 RecyclerViews 之间移动焦点

转载 作者:行者123 更新时间:2023-12-04 15:32:31 25 4
gpt4 key购买 nike

我正在构建一个具有以下布局的 Android TV 应用程序:
enter image description here

左右两个列表都是带有垂直LinearLayoutManagers的RecyclerViews,Header View 是静态的。使用 D-PAD 导航在一个列表中工作正常,但从一个列表切换到另一个列表时会出现问题。焦点从列表 1 的第 5 项移动到列表 2 的第 5 项。当列表 2 少于 5 个项目时,它只会失去焦点。

我希望保存最后一个焦点项目索引,并且当用户导航 list1-list2-list1 时,具有该索引的项目再次获得焦点并防止 View 失去焦点。有什么好的解决办法吗?

要求的行为:
用户导航到列表顶部并按“UP” - 焦点停留在原来的位置,没有任何 react 。
用户导航到列表底部并按“向下” - 焦点停留在原来的位置,没有任何 react 。
用户从 list1 导航到 list2 - 之前在 list2 中获得焦点的项目获得焦点,或者如果之前没有焦点,则 item0 获得焦点。

主要布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<ImageView
android:id="@+id/iv_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="false"
/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="27dp"
android:layout_marginLeft="48dp"
android:layout_marginRight="48dp"
android:layout_marginTop="27dp"
android:orientation="horizontal"
>

<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical"
>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:orientation="horizontal"
>

<ImageView
android:id="@+id/iv_poster"
android:layout_width="@dimen/episodes_list_item_height"
android:layout_height="@dimen/episodes_list_image_width"
/>

<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
>

<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<TextView
android:id="@+id/tv_release_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
/>

<TextView
android:id="@+id/tv_rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:drawableLeft="@drawable/ic_star_white_24dp"
android:drawablePadding="@dimen/view_padding_small"
/>

</FrameLayout>

<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
</LinearLayout>

</LinearLayout>

<android.support.v7.widget.RecyclerView
android:id="@+id/rv_seasons_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:focusable="false"
/>

</LinearLayout>

<android.support.v7.widget.RecyclerView
android:id="@+id/rv_episodes_list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:focusable="false"
/>

</LinearLayout>

</FrameLayout>

项目布局,用于两个列表:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/seasons_list_item_height"
android:orientation="horizontal"
android:focusable="true"
>

<TextView
android:id="@+id/tv_title"
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_weight="1"
/>

<TextView
android:id="@+id/tv_episodes_count"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:ems="10"
/>

</LinearLayout>

最佳答案

通过 Google 的 Leanback 库资源挖掘回答了我的付款人。
如果你遇到同样的问题,只需用 this 包裹你的 RecyclerViews并且不要忘记设置

private boolean mPersistFocusVertical = false;

如果您希望在水平搜索时保持焦点,就像在我的布局中一样。

关于focus - Android TV 在 RecyclerViews 之间移动焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35203829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com