2017-06-15 6 views
0

現在の画面をスクロールします。 私はこれを試しました AccessibilityNodeInfo accessibilityNodeInfo=getRootInActiveWindow(); accessibilityNodeInfo.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_DOWN); 私はいつも "密封されたインスタンスでこのアクションを実行できません"と言います。 助けてください。AccessibilityServiceでAccessibilityNodeInfoを使用してスクロールを実行します。

答えて

0

まず、あなたがしようとしている問題。

あなたはこの

が密閉されたインスタンス上でこのアクションを実行することはできません参照してください。

このメッセージはあなたの情報が設定されていることを伝えるAndroidです。ビューがスクロール可能ではないと言うことができるのは理にかなっていますか? NO。ビューをスクロール可能にすることはできません。スクロール可能なビューはビューまでです。例えば、スクロール可能なボタンは意味をなさない!アクセシビリティサービスはこの動作を強制することはできません。

アプリケーションのルートノードは何らかのタイプのフレームレイアウトであり、決してスクロール可能ではありません。階層のスクロール可能な部分は、ほとんどの場合、メインレイアウト/ルートビューの子です。ストーリーのモラル、あなたはビューをスクロール可能にすることはできません、スクロール可能なビューを見つける必要があります。

これは、私があなたにこれについてはるかに優れたソリューションを提供するつもりです、うまくいけばそれはあなたがサポートするデバイスの範囲内にあります。

@TargetApi(Build.VERSION_CODES.M) 
public boolean scrollTo(AccessibilityNodeInfo nodeInfo) { 

    return nodeInfo.performAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SHOW_ON_SCREEN.getId()); 

} 

あなたはこれが本当であるレイアウト内のビューのためにAccessibilityNodeInfo階層を探索されて何をする必要があるかのAndroid M、beforバージョンをサポートする必要がある場合、これはテストされていません(このようなおおよそのように見えますが、すべきでしょう非常に近いです!):

public boolean scrollView(AccessibilityNodeInfo nodeInfo) { 

    if (nodeInfo == null) return false; 

    if (nodeInfo.isScrollable()) { 
     return nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); 
    } 

    for (int i = 0; i < nodeInfo.getChildCount(); i++) { 
     if (scrollView(nodeInfo.getChild(i)) { 
      return true; 
     } 
    } 

    return false; 
} 
+0

私の質問を編集してください。 いいえAndroid MをサポートしたくありませんAndroid-Oでこれをやりたいのです –

+0

しかし、スクロールスクロールのオプションが4つある場合は、スクロールスクロールを左右に行いますが、私はそれのために何をするべきですか? それ以外の場合は2つのオプションでうまくいきます。 –

+0

より優れたソリューションはAndroid Oでもうまくいきます。 @TargetApiは正確ではない「最小」です。そのアプローチを試してみてください。 – ChrisCM

関連する問題