1

私はHorizontalScrollView別の内部にあるアンドロイドでUIを設計していHorizontalScrollViewます。しかし、子供HorizontalScrollViewは働かない。

HorizontalScrollViewchild でジェスチャが行われるたびに親を無効にすることは可能ですかHorizontalScrollView? これは難しいように聞こえますが、これを UI に実装する必要があります。

4

3 に答える 3

2

一般に、スクロールする別のものの中にスクロールするものを持つことは、悪い考えです。Google は推奨していません。

これは、Android がスクロール イベントを処理する方法によるものです。と呼ばれるメソッドがあり、タッチ イベントをインターセプトするかdispatchTouchEvent()onInterceptTouchEvent()その子に渡すかを決定します。スクロール可能なビューの場合、常に「スワイプ」の動きをインターセプトします。したがって、あなたの子供には決して行きません。

これには回避策がありますが、面倒でほとんどの場合うまくいきません。この状況を回避するには、UI を調整することをお勧めします。

これらのスレッドで議論されているいくつかの潜在的な回避策を次に示します。

ScrollView の ListView の潜在的な回避策

ScrollView 内の ListView が Android でスクロールしない

Android: カスタム リスト ビューを備えたスクロール可能な設定ウィンドウ

于 2012-10-30T06:47:27.663 に答える
0

次のように onInterceptTouchEvent をオーバーライドするのはどうですか。

public class EmbeddedHorizontalScrollView extends HorizontalScrollView {

    public EmbeddedHorizontalScrollView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // tell parent and it's ancestors to skip touch events
                this.getParent().requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_UP:
                this.getParent().requestDisallowInterceptTouchEvent(false);
                break;
        }
        return super.onInterceptTouchEvent(ev);
    }
}
于 2012-10-30T06:46:28.353 に答える
0

そこで、horisontalScrollView 内の LinearLayout 内で ScrollView を使用しました。主な問題は、Y スワイプが検出されたときに、Horizo​​ntalScrollView に OnInterceptTouchEvent を実装して、子 ScrollView に TouchEvent を渡すことでした。そして、それはうまく機能し、興味をそそられます。はい、Scrollview または listView を別の Scrollview に直接配置するべきではありませんが、Linearlayout を ScrollView に配置してから、他の Scrollable オブジェクトを配置することはできます。

于 2012-11-13T18:33:08.617 に答える