当我打开TalkBack时,一旦在我的Spinner中进行选择,焦点会立即返回到屏幕顶部(工具栏)。我想在用户选择后立即关注微调器。
我尝试将微调器设置为可聚焦:
spinner.setFocusable(true);
spinner.setFocusableInTouchMode(true);
我查看了以下StackOverflow问题和答案,这些问题和答案没有直接解决我的问题:
我注意到在设置选择时会暂时禁用微调器。我猜这就是焦点被委托给不同观点的原因。我怎样才能绕过这种禁用或解决它?
任何帮助都将不胜感激。
答案 0 :(得分:1)
我能够通过执行以下操作解决此问题(希望这有助于其他人遇到同样的问题):
private boolean isUserSelection; // to detect user selection
spinner.setChangeListener(this);
spinner.setFocusable(true);
spinner.setFocusableInTouchMode(true);
if (((AccessibilityManager)getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE)).isEnabled())
{
spinner.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View v, boolean hasFocus)
{
if (hasFocus && !isUserSelection)
v.performClick(); //bypasses the caret inside the spinner so user doesn't have to tap twice to open the drop down
else if (!hasFocus && isUserSelection)
v.requestFocus();
}
});
}
在微调器的itemSelectedListener中,使用以下代码:
if (isUserSelection && (AccessibilityManager)getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE)).isEnabled()))
durationSpinner.requestFocusFromTouch();
答案 1 :(得分:0)
重点放在哪里?尝试从那里请求焦点。
newlyFocusedView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
newlyFocusedView.clearFocus();
spinner.requestFocus();
spinner.performClick();
}
}
});
同时尝试spinner.setFocusable(true);