2010-02-09 25 views
14

Trong ứng dụng của tôi, tôi có một dòng để tăng chiều rộng của tiện ích con (bằng cách kéo dòng sang phải/trái) và tôi đã bật tính năng ScrollView trong cùng một hoạt động. Tôi cần vô hiệu hóa hành động xem cuộn khi người dùng chạm vào dòng và khi người dùng phát hành, nó sẽ được bật. ScrollView phải ở trạng thái hiển thị nhưng phải tắt thao tác của chế độ xem cuộn. Xin hãy giúp tôi giải quyết vấn đề này. Tôi đã thử với những điều này nhưng không ai trong số họ đang làm việc.Tắt hành động ScrollView

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

Xin cảm ơn trước.

Trả lời

5

Không chắc chắn rằng đây là những gì bạn đang yêu cầu, nhưng bạn có thể phải phân lớp ScollView và làm cho bạn thực hiện riêng mà có thể vô hiệu hóa di chuyển vào những thời điểm nhất định.

Đây là một người đã làm điều gì đó tương tự, nhưng đối với các sự kiện liên lạc, để tắt di chuyển qua những sự kiện đó.

http://osdir.com/ml/AndroidDevelopers/2009-08/msg01099.html

46

Điều này có thể hơi muộn nhưng tôi chạy vào cùng một vấn đề vì vậy giải pháp của tôi cũng tương tự như trên, phải vô hiệu hóa các OnTouchListener như sau:

// 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);  
36

Đây là hơi muộn , nhưng một cách dễ dàng hơn nữa là chỉ cần có cha mẹ của bạn ViewGroup và gọi requestDisallowInterceptTouchEvent(true) trên đó. Điều này không chỉ khiến cha mẹ trực tiếp (chế độ xem cuộn) mà còn bất kỳ đối tượng gốc nào khác có thể chặn liên lạc để bỏ qua nó trong khoảng thời gian của sự kiện cụ thể. Điều này là tuyệt vời khi bạn có một con có thể kéo và cha mẹ có thể kéo và muốn vô hiệu hóa việc kéo cha mẹ trong khi con đang được kéo.

Đây cũng là giải pháp tổng quát hơn là tắt chế độ xem cuộn. Nếu bạn sử dụng lại chế độ xem con bạn có thể kéo ở một nơi khác, chế độ xem đó sẽ vẫn hoạt động: Bạn không cần phải biết ID của chế độ xem cuộn. Mã có thể sử dụng lại mà không sửa đổi luôn tốt.

+1

Điều này là hoàn hảo, cảm ơn! – Jason

+1

Rực rỡ. Bạn có thể sử dụng điều này trong các khung nhìn bằng cách thực hiện 'getParent(). RequestDisallowInterceptTouchEvent (...)'. Tôi đã sử dụng nó trong bộ sưu tập cuộn ngang trong ScrollView và nó hoạt động hoàn hảo! – Timmmm

+3

Thật kỳ lạ tôi đã có một scrollview-> tuyến tính bố trí-> kiểm soát mới của tôi và thấy tôi đã thực sự chọn scrollview để gọi requestDisallowInterceptTouchEvent (true) này trước khi nó có tác dụng dừng cuộn. Tôi nghĩ rằng các tài liệu nói rằng nó sẽ gửi thông điệp này trở lên cho tất cả các bậc cha mẹ nhưng điều đó đã không làm việc cho tôi. – sradforth

0

Nếu ai là sử dụng L Android hoặc mới hơn và trọng onTouchonInterceptTouchEvent không hoạt động:
thử trọng onStartNestedScrollreturn false.

Cũng có thuộc tính XML mới nestedScrollingEnabled, nhưng có vẻ như nó phải ở trên Chế độ xem bị rò rỉ sự kiện cuộn, thay vì trên ScrollView bị ảnh hưởng bởi rò rỉ hoặc bất kỳ vị trí nào trong phân cấp bố cục giữa họ. Vì vậy, nếu bạn không biết trước những gì ScrollViews con bạn có thể có, ghi đè onStartNestedScroll cho ScrollView bị ảnh hưởng là con đường để đi.

Các vấn đề liên quan