15

私のアプリケーションでは、(線を右/左にドラッグして) ウィジェットの幅を広げるための線がありScrollView、同じアクティビティで有効にしています。ユーザーがラインに触れたときにスクロールビューアクションを無効にする必要があり、ユーザーが離したときに有効にする必要があります。はScrollView表示状態にする必要がありますが、スクロール ビューのアクションは無効にする必要があります。この問題を解決するのを手伝ってください。これらを試してみましたが、どれも機能していません。

scroll.setEnabled(false); 
scroll.setFocusable(false); 
scroll.setHorizontalScrollBarEnabled(false); 
scroll.setVerticalScrollBarEnabled(false);

前もって感謝します。

4

3 に答える 3

49

これは少し遅れるかもしれませんが、同じ問題が発生したため、私の解決策は上記と同様であり、次のようにOnTouchListenerを無効にする必要がありました。

// Get the ScrollView
final ScrollView myScroll = (ScrollView) findViewById(R.id.display_scrollview);


// Disable Scrolling by setting up an OnTouchListener to do nothing
myScroll.setOnTouchListener( new OnTouchListener(){ 
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return true; 
    }
});


// Enable Scrolling by removing the OnTouchListner
tvDisplayScroll.setOnTouchListener(null);    
于 2011-02-23T11:44:34.890 に答える
37

これは少し遅れていますが、さらに簡単な方法は、親ViewGroupに電話requestDisallowInterceptTouchEvent(true)してもらうことです。これにより、直接の親 (スクロール ビュー) だけでなく、タッチを傍受する可能性のある他のすべての親オブジェクトが、特定のイベントの間タッチを無視します。これは、ドラッグ可能な子とドラッグ可能な親があり、子がドラッグされている間は親のドラッグを無効にしたい場合に最適です。

これは、スクロール ビューを具体的に無効にするよりも一般的な解決策でもあります。ドラッグ可能な子ビューを別の場所で再利用しても機能します。スクロール ビューの ID を知る必要はありません。変更せずに再利用できるコードは常に優れています。

于 2011-10-10T01:29:41.923 に答える
0

誰かが Android L 以降を使用していて、オーバーライドonTouchonInterceptTouchEventて動作しない場合:オーバーライドして
みてください。onStartNestedScrollreturn false

新しい XML 属性もありますが、リークの影響を受ける ScrollView ではなく、スクロール イベントをリークしているビュー、またはそれらの間のレイアウト階層のどこかにある必要があるようnestedScrollingEnabledですそのため、どの子 ScrollView を持っている可能性があるかが事前にわからない場合はonStartNestedScroll、影響を受ける ScrollView をオーバーライドするのが最善の方法です。

于 2015-12-01T15:59:15.210 に答える