0

ViewPager のビューのコンテンツを読み取るために Talkback を使用していますが、現在のビューのコンテンツと次のビュー (表示されていない) のコンテンツを読み取っています。

例えば

ビュー 1

TextView -> hi1 TextView -> bye1

ビュー2

TextView -> hi2 TextView -> bye2

トークバック読み上げ hi1, hi2, bye1, bye2

pager.setOffscreenPageLimit() の値を変更しようとしましたが、何もしません。OffScreenPageLimit の値が 4 であっても、Talkback は常に現在のビューと次のビューを読み取ります (次の 2 つのビューを読み取る必要があります)。 )。

私が見つけた唯一の情報は次のとおりです。https://code.google.com/p/eyes-free/issues/detail?id=139

何か案が?

4

1 に答える 1

2

OnChangePageView 内にカスタム Accessibility イベントを作成eventし、読みたい文字列をリストに保存して、Activity/fragment とアダプターの間のインターフェイスから位置を取得できます。

ViewPager.OnPageChangeListener pageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrollStateChanged(int arg0) { }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) { }

        @Override
        public void onPageSelected(int position) {
            if(isTalkbackActive(getApplicationContext())) {
                AccessibilityEvent event = AccessibilityEvent.obtain();
                if (onPageChangeInterface != null) {
                    String text = onPageChangeInterface.getTextToRead(position);
                    event.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT);
                    event.getText().add(text);
                    viewPagerWallets.requestFocus();
                    viewPagerWallets.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
                    accessibilityManager.sendAccessibilityEvent(event);

                }
            }
        }

    };

次に、保存したのと同じ文字列を、最初の位置にのみすべてのビューがある相対の ContentDescription に追加します。

ArrayList readAccessibilityValues = new ArrayList<>();
 String valor = valor + txtView1.getText()+",";
    valor = valor + txtView2.getText()+",";
    if(position == 0) {
        relativeGeneral.setContentDescription(valor);
    }
 readAccessibilityValues.add(valor);

それは最善の解決策ではないと思いますが、別の解決策は見つかりませんでした

于 2018-06-05T12:29:37.040 に答える