Как настроить подсказку об использовании TalkBack для элементов в RecyclerView?

Я пытаюсь сделать мое приложение пригодным для слепых людей. При касании дочернего элемента в RecyclerView он выделяется, тогда как при двойном касании он открывает категории дочернего элемента. В основном нужно дважды нажать, чтобы выполнить действие щелчка. Я хочу, чтобы об этом говорил TalkBack через советы по использованию. Пробовал с помощью [RecyclerViewAccessibilityDelegate] [1]

[1]: https://developer.android.com/reference/android/support/v7/widget/RecyclerViewAccessibilityDelegate, но безрезультатно. Я успешно настроил советы по использованию для отдельного ImageButton, но сделал что-то не так, когда дело доходит до RecyclerView.

Вот мой MainActivity.java

 public class MainActivity extends AppCompatActivity 
{

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_levelx_layout);
    ..
    ..
    initializeLayoutViews();
    initializeViewListeners();
    ...
}

private void initializeLayoutViews() 
{
    ...
    mRecyclerView = findViewById(R.id.recycler_view);
    mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
    mRecyclerView.setAdapter(new MainActivityAdapter(this));
    mRecyclerView.setVerticalScrollBarEnabled(true);
    mRecyclerView.setScrollbarFadingEnabled(false);
    mRecyclerView.requestFocus();
}

private void initializeViewListeners() 
{
    initRecyclerViewListeners();
}


private void initRecyclerViewListeners() {
    mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(this, mRecyclerView, new RecyclerTouchListener.ClickListener()
    {
        @Override
        public void onClick(final View view, final int position) 
        {
            ViewCompat.setAccessibilityDelegate(mRecyclerView, new TalkbackHints_RecyclerView(mRecyclerView));
            LinearLayout menuItemLinearLayout = view.findViewById(R.id.linearlayout_icon1);
            menuItemLinearLayout.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v) 
                {
                    tappedCategoryItemEvent(view, v, position);
                }
            });
        }

        @Override
        public void onLongClick(View view, int position) {
        }
    }));

    mRecyclerView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() 
    {
        @Override
        public void onChildViewAttachedToWindow(View view)
        {
            mRecyclerItemsViewList.set(mRecyclerView.getChildLayoutPosition(view), view);
            if (mRecyclerItemsViewList.contains(view) && mSelectedItemAdapterPos > -1 &&
                    mRecyclerView.getChildLayoutPosition(view) == mSelectedItemAdapterPos)
                setMenuImageBorder(view, true);
        }

        @Override
        public void onChildViewDetachedFromWindow(View view) {
            setMenuImageBorder(view, false);
            mRecyclerItemsViewList.set(mRecyclerView.getChildLayoutPosition(view), null);
        }
    });
}}

И TalkBackHints_RecyclerView.java:

import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerViewAccessibilityDelegate;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;

public class TalkbackHints_RecyclerView extends RecyclerViewAccessibilityDelegate 
{
public TalkbackHints_RecyclerView(RecyclerView recyclerView) {
    super(recyclerView);
}

@Override
public void onInitializeAccessibilityNodeInfo(View host,
                                              AccessibilityNodeInfoCompat info) {
    super.onInitializeAccessibilityNodeInfo(host, info);

    //RecyclerViewAccessibilityDelegate.ItemDelegate();
    AccessibilityNodeInfoCompat.AccessibilityActionCompat intoCategory = new
            AccessibilityNodeInfoCompat.AccessibilityActionCompat(
            AccessibilityNodeInfo.ACTION_CLICK, "select. Double tap again to " +
            "enter this category");
    info.addAction(intoCategory);
}
}

Пожалуйста, скажите мне, где я иду не так.

0 ответов

Другие вопросы по тегам