禁用对片段的关注 [英] Disable focus on fragment
问题描述
我正在为电视平台开发应用程序,并使用RCU进行导航.
I'm working on application for TV platform and use RCU for navigation.
我有一个用例,我有两个彼此叠在一起的片段,并且同时在屏幕上可见.
I have use case where I have two fragments one above each other and visible on the screen at the same time.
是否有一种方法可以禁用下面的聚焦片段? 片段视图上的setFocusable(false)不起作用,我可以将元素集中在下面的片段中.
Is there a way to disable focusing fragment that is below? setFocusable(false) on fragments view doesnt work, and I'm able to focus elements in fragment below.
谢谢.
推荐答案
我最后提出的解决方案是:
The solution that I've come up with in the end is:
为片段添加了自定义生命周期侦听器,即: onFragmentResume 和 onFragmentPause 事件,这些事件在我需要显示/隐藏或切换时手动调用片段之间.
Added custom Lifecycle listeners for the fragment namely: onFragmentResume and onFragmentPause events which I call manually when I need to show/hide or switch between fragments.
@Override
public void onFragmentResume() {
//Enable focus
if (getView() != null) {
//Enable focus
setEnableView((ViewGroup) view, true);
//Clear focusable elements
focusableViews.clear();
}
//Restore previous focus
if (previousFocus != null) {
previousFocus.requestFocus();
}
}
@Override
public void onFragmentPause() {
//Disable focus and store previously focused
if (getView() != null) {
//Store last focused element
previousFocus = getView().findFocus();
//Clear current focus
getView().clearFocus();
//Disable focus
setEnableView((ViewGroup) view, false);
}
}
/**
* Find focusable elements in view hierarchy
*
* @param viewGroup view
*/
private void findFocusableViews(ViewGroup viewGroup) {
int childCount = viewGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
View view = viewGroup.getChildAt(i);
if (view.isFocusable()) {
if (!focusableViews.contains(view)) {
focusableViews.add(view);
}
}
if (view instanceof ViewGroup) {
findFocusableViews((ViewGroup) view);
}
}
}
/**
* Enable view
*
* @param viewGroup
* @param isEnabled
*/
private void setEnableView(ViewGroup viewGroup, boolean isEnabled) {
//Find focusable elements
findFocusableViews(viewGroup);
for (View view : focusableViews) {
view.setEnabled(isEnabled);
view.setFocusable(isEnabled);
}
}
这篇关于禁用对片段的关注的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!