2013-04-25 4 views
0

현재 ListView을 사용하고 있으며 정상적으로 작동합니다. 하지만 단락과 같은 ListView의 텍스트가 있고 그 두 줄의 텍스트를 표시하고 텍스트의 나머지 부분을 스크롤 가능하게 만들고 싶습니다. 그러나 제가 만들면 TextView을 스크롤 할 수있는 ListViewTextView은 부모 (ListView)의 포커스를 얻고 스크롤 할 수 없게됩니다.목록보기 항목 스크롤 가능 수직

ListView의 스크롤링 속성을 방해하지 않는이 스크롤 가능한 TextView 기능을 구현할 수 있습니까?

감사합니다.

답변

1

불가능한 방법은 없습니다. 어려운 일은 할 수 있습니다. 직접이 일은 성취 될 수 없지만 간접적으로 성취 될 수 있습니다. 그렇습니다. 어떻게 달성 했습니까? 조금 복잡하지만 그렇습니다. 어떻게 달성했는지 공유 할 수 있습니다. 자신의 Toch는 방법은 서로를 차단하지 않으며, 그이 requestDisallowInterceptTouchEvent(true); 이 블록 부모의 TouchListener을 사용하여 수행 할 수 있도록 내가 목록보기의 터치 모드를 차단 Textview에 클릭 ListView에서

(ListView).

지금 TextView에 클릭하면, 화면은 터치 리스너를 허용하는 경우도 setMovementMethod() 하지만 운동을 위해 나는 사용자 정의 클래스를 만들어 내가는 TouchIntercepter 수 있도록 부모를 클릭하면 클래스는 그 후

public class myScrollMethod extends ScrollingMovementMethod { 

    @Override 
    public void onTakeFocus(TextView widget, Spannable text, int dir) { 
     // TODO Auto-generated method stub 
     super.onTakeFocus(widget, text, dir); 
    } 

    @Override 
    public boolean onKeyDown(TextView widget, Spannable buffer, 
      int keyCode, KeyEvent event) { 
     switch (keyCode) { 
     case KeyEvent.KEYCODE_DPAD_DOWN: 
      for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) { 
       down(widget, buffer); 
      } 
      return true; 
     case KeyEvent.KEYCODE_DPAD_UP: 
      for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) { 
       up(widget, buffer); 
      } 
      return true; 
     default: 
      return super.onKeyDown(widget, buffer, keyCode, event); 
     } 
    } 

    private int getScrollAmount(TextView widget) { 
     final int visibleLineCount = (int) ((1f * widget.getHeight())/widget 
       .getLineHeight()); 
     int scrollAmount = visibleLineCount - 1; 
     if (scrollAmount < 1) { 
      scrollAmount = 1; 
     } 
     return scrollAmount; 
    } 


} 

에 따라입니다 부모의 값을 true로 설정하면 부모를 잡고 스크롤을 시작합니다. 내가 성공적으로 이러한 요구 사항을 달성 한이 방법으로

1

달성하려는 것은 실제로 불가능합니다. OS가 목록 행 단락 대 목록 단락을 스크롤하려고한다는 것을 OS가 어떻게 알 수 있습니까? 실제 목록 자체를 스크롤하기 전에 기본적으로 목록 행 단락의 맨 아래로 스크롤해야합니다. 이것은 일반적인 UX가 아니라 사용자에게 혼동을줍니다.

나는 ExpandableListView을 살펴볼 것을 제안합니다. 그것은 당신이 각 행의 축소 버전을 가질 수 있습니다, 귀하의 경우에는 각 목록 행에 대해 단지 2 줄의 텍스트. 사용자가 행을 탭하면 전체 단락 양식으로 확장 될 수 있으며 목록은 전체 시간 동안 스크롤 할 수 있습니다. 온라인에서 찾을 수 있어야하는 자습서가 많이 있습니다.

4

나는 다음과 같은 방법으로이 작업을 수행 할 수 있었다 다음 ListAdapter의의 getView 방법 속으로

이 줄의 텍스트 뷰 객체를 취득하고,

쓰기
textView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     v.getParent().getParent().requestDisallowInterceptTouchEvent(true); 
     return false ; 
    } 
}); 

당신이 텍스트 뷰를 만질 때, 스크롤

를 제어 할