Когато включа TalkBack, след като се направи селекцияв ми Spinner фокусът незабавно се връща в горната част на екрана (лентата с инструменти). Бих искал фокусът да бъде върху въртящия момент непосредствено след избора на потребителя.
Опитах да настроя въртящото устройство, за да може да се фокусира:
spinner.setFocusable(true);
spinner.setFocusableInTouchMode(true);
Проверих следните въпроси и отговори на StackOverflow, които не засягат пряко въпроса, който имам:
Забелязвам, че въртящият момент е за краткое деактивиран, тъй като е зададен изборът. Предполагам, че затова фокусът се делегира на различно мнение. Как мога да заобиколя това деактивиране или да работя около него?
Всяка помощ ще бъде оценена.
Отговори:
1 за отговор № 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();
0 за отговор № 2
Къде се фокусира? Опитайте да поискате фокус от там като такъв.
newlyFocusedView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
newlyFocusedView.clearFocus();
spinner.requestFocus();
spinner.performClick();
}
}
});
Също така опитайте spinner.setFocusable(true);