gpt4 book ai didi

android - 停止 dpad 焦点超出 android 中的当前 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:56:41 24 4
gpt4 key购买 nike

我当前的应用需要使用方向键 Remote 进行控制。

使用焦点/选择,最近邻居的自动计算按预期工作,但我想限制上、下、左、右移动仅发生在包含焦点 View 的当前 fragment 中,并在之前取消焦点更改它移动到另一个 fragment 。

我在选择 View 时以编程方式将焦点更改为新 fragment 。

这可能吗?我只能假设 onFocusChange() 事件允许我检查新焦点是否在 fragment 之外并返回但这里没有运气......

最佳答案

简而言之,您可以在包含 fragment 的容器上调用 setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS) 以阻止所有 fragment 后代的可聚焦性。要恢复可聚焦性,您可以调用 setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS)

详情:

假设您的 FrameLayout 包含两个 fragment ,一个在另一个之上,并且您希望将焦点导航限制在 top_fragment 就位时和 back_fragment 否则:

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

<FrameLayout
android:id="@+id/back_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

<FrameLayout
android:id="@+id/top_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</FrameLayout>

首先在 FragmentManager 实例上调用 addOnBackStackChangedListener() 以提供后台监听器,您可以在其中使用方法 setDescendantFocusability 编写焦点控制代码。您可以使用 getFragmentManager().findFragmentBy* 找出现在使用的 fragment 、顶部的 fragment 等,并适本地设置后代可聚焦性标志。当您替换 top_fragment 容器时,使用 addToBackStack() 方法将事务添加到 backstack。这样您就可以在 backstack 发生变化时更改可聚焦性设置,不仅是在您添加 fragment 时,而且在您使用 BACK 弹出 fragment 时也是如此。

关于android - 停止 dpad 焦点超出 android 中的当前 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18438457/

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