Dem*_*tix 5 android focus android-fragments
我当前的应用需要使用D-Pad遥控器进行控制.
使用焦点/选择,最近邻居的自动计算按预期工作,但我想限制向上,向下,向左,向右移动仅发生在包含聚焦视图的当前片段中,并在移动到焦点之前取消焦点更改另一个片段.
我在选择视图时以编程方式将焦点更改为新片段.
这可能吗?我只能假设一个onFocusChange()事件可以让我检查新的焦点是否在片段之外并返回,但这里没有运气......
简而言之,您可以调用setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS)
保存片段的容器来阻止所有片段后代的可聚焦性。要恢复可聚焦性,您可以致电setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS)
假设您FrameLayout
包含两个片段,一个在另一个之上,并且您希望将焦点导航限制在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>
Run Code Online (Sandbox Code Playgroud)
首先调用addOnBackStackChangedListener()
的实例FragmentManager
来提供 backstack 侦听器,您可以在其中使用方法 编写可聚焦性控制代码setDescendantFocusability
。您可以用来getFragmentManager().findFragmentBy*
找出现在使用的片段、顶部的片段等,并适当地设置后代可聚焦性标志。当你更换top_fragment
容器时,使用addToBackStack()
方法将事务添加到backstack。这样,您将能够在后退堆栈更改时更改可聚焦性设置,不仅在添加片段时,而且在使用 BACK 弹出它时也是如此。
归档时间: |
|
查看次数: |
924 次 |
最近记录: |