视图在可见时窃取辅助功能焦点

View steals accessibility focus when becoming visible

在屏幕上,有一个具有焦点的ImageView。当通过 coolNavbarView.setVisiblity(View.GONE) 显示新视图时,新视图会抢走焦点。如果用户导航到新视图,它应该能够变得可聚焦,但它不应该在显示后立即抢走焦点。焦点应该停留在已经有焦点的 ImageView 上。

我知道有一个 setFocusable(boolean) 方法可以让视图成为焦点,有没有 setStealFocusOnVisible(boolean) 方法?

这是它如何成为焦点的堆栈跟踪。

com.mycompany.navbar.view.CoolThumbnailsView.onFocusChange(CoolThumbnailsView.java:94)
android.view.View.onFocusChanged(View.java:5462)
android.widget.AbsListView.onFocusChanged(AbsListView.java:2063)
android.widget.ListView.onFocusChanged(ListView.java:3587)
android.view.View.handleFocusGainInternal(View.java:5218)
android.view.ViewGroup.handleFocusGainInternal(ViewGroup.java:651)
android.view.View.requestFocusNoSearch(View.java:7937)
android.view.View.requestFocus(View.java:7916)
android.view.ViewGroup.requestFocus(ViewGroup.java:2612)
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2657)
android.view.ViewGroup.requestFocus(ViewGroup.java:2613)
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2657)
android.view.ViewGroup.requestFocus(ViewGroup.java:2613)
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2657)
android.view.ViewGroup.requestFocus(ViewGroup.java:2613)
android.view.View.requestFocus(View.java:7883)
android.view.View.requestFocus(View.java:7862)
android.view.ViewRootImpl.focusableViewAvailable(ViewRootImpl.java:2982)
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698)
android.view.View.setFlags(View.java:10008)
android.view.View.setVisibility(View.java:6951)
com.mycompany.navbar.view.CoolNavbarView.show(CoolNavbarView.java:99)
com.mycompany.navbar.controller.CoolNavbarViewController.show(CoolNavbarViewController.java:292)

就我而言,ListView 抢走了焦点。我能够通过在使 ListView 可见之前从 ListView 中删除 Focusable 属性来修复它

ListView v = ViewUtils.findViewById(view, listLayoutId, ListView.class);
v.setFocusable(false);