2011-01-07 3 views
1

나는 ListActivityWebView을 표시합니다.
보이는 WebViews에 this을 호출 할 텍스트를 복사하는 메뉴 옵션이 있습니다.
모든 것은 한 가지를 제외하고 작동합니다. ListView은 해당 스크롤을 위해 MotionEvent을 사용하므로 수직 방향으로 텍스트 선택을 수행 할 수 없습니다.
나는이 시도했다 : 스크롤을 차단뿐만 아니라 MotionEventWebView 좌표 조정되지 않은 전달합니다 임시 우회 ListView 스크롤

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (webViewsInTextSelectionMode) { 
     bypassEventToWebViews(ev); 
     return true; 
    } else { 
     return super.dispatchTouchEvent(ev); 
    } 
} 

.
이 경우 올바르게 ListView를 스크롤하지 못하게 할 방법이 있습니까?

답변

2

이것은 어둠 속에서 완전한 장면으로 작동하지 않을 가능성이 있지만 시도할만한 가치가있을 것입니다. WebView이 포함 된 ViewGroup 안에있는 ListView 학부모의 ViewParent#requestDisallowInterceptTouchEvent에 전화를 걸어 볼 수 있습니다. 텍스트 선택 기간 동안 다운 모션 이벤트가있을 때마다 전화해야합니다. 이것은 올림/취소 모션 이벤트에서 플래그가 재설정되기 때문입니다.

그래도 작동하지 않는다면 ListView의 복사본을 만들어 적절하게 수정해야 할 것입니다. 이것은 그리 어렵지 않습니다. 클래스 계층의 모든 클래스를 AdapterView으로 복사하고 복사 한 AdapterView 클래스 (주로 protected/public 접근 함수가있는 private/package 수준 멤버 변수 사용)를 수정해야합니다.

+0

'requestDisallowInterceptTouchEvent()'가 답입니다. 감사! – yanchenko

+0

나를 위해 일해도 - 그냥 구글 알려주 - 행에 오른쪽 (또는 왼쪽)을 스 와이프하는 동안 ListView 스크롤을 해제하려고했습니다. 스크롤이 스 와이프를 방해하여 취소되었습니다. 스 와이프 (아래로/이동 이벤트) 중 터치 이벤트를 가로 채지 못하게하면 트릭이 완료되었습니다. 이제 완벽하게 작동합니다! 감사합니다. – baraka

4

WebView를 표시하는 ListActivity가 있습니다.

그건 좋은 생각이 아닙니다. WebViewListView은 모션 이벤트를 위해 경쟁합니다. 안드로이드에서, 특히 같은 방향 (이 경우 위, 아래)으로 스크롤 할 수있을 때, 스크롤하는 것에 물건을 두는 것은 거의 권장되지 않습니다.

표시 가능한 WebView에서이를 호출하는 텍스트를 복사하는 메뉴 옵션이 있습니다.

해당 질문에 대한 대답이 의미하는 것이면 좋지 않습니다. 나는 다른 대답에 대해 모호하지만, 적어도 나쁜 생각은 아니다. prima facia.

모든 것은 한 가지를 제외하고 모두 작동합니다. ListView는 자체 스크롤을 위해 해당 MotionEvent를 소비하므로 수직 방향으로 텍스트 선택을 수행 할 수 없습니다.

내 지점.

이 경우 올바르게 ListView를 스크롤하지 못하게 할 방법이 있습니까?

내가 TextViewHtml.fromHtml()로를 대체 WebViews 치우는 대신에 초점을 맞출 것입니다. 또는 단일 콘텐츠 WebView을 사용하여 ListView을 없애고 통합 콘텐츠를 렌더링 할 수 있습니다.

+0

처음부터 다시해야만한다면, 하나의 'WebView'로 갈 것입니다. 여전히 API 8 이후에 공개 된'emulateShiftHeld()'와 함께. – yanchenko

+0

+1은하지 말라. – Falmarri

관련 문제