2011-05-16 4 views
2

Iam xml 파일에서 아래 코드를 사용하고 textview를 사용하여 프로그래밍 방식으로 하위 뷰를 추가하지만 특정 위치로 이동해야합니다 (모든 textview iam이 1부터 번호 시작을 추가한다고 가정하고 총 10 개 textviews에서 5 번째 위치 textview로 이동). scrollview.I 사용하여보기 스크롤하는 방법을 알고 있지만 xy이 레이아웃에서 cooardinates 계산하는 방법을 모릅니다. 지침을 제공하십시오. 이유를 자세히보기 목록을 포함하고 쉽게 액세스하기 위해 만든 사용자 지정 목록보기를 사용하지 :선형 레이아웃에서 특정 위치 xy 좌표를 얻는 방법 안드로이드?

<ScrollView android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:scrollbars="vertical" 
     android:id="@+id/agenda_scroll" 
     > 
     <LinearLayout android:id="@+id/inner_layout" 
      android:orientation="vertical" android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

     </LinearLayout> 
    </ScrollView> 

Suppost 내 코드는 상자 밖으로 생각이

ScrollView scview = (ScrollView)findViewById(R.id.Scl); 
LinearLayout eventLayout = (LinearLayout) findViewById(R.id.inner_layout); 
TextView txtView = new TextView(cx); 
txtView.setText("1"); 
eventLayout.addView(txtview); 
TextView txtView = new TextView(cx); 
txtView.setText("2"); 
eventLayout.addView(txtview); 
TextView txtView = new TextView(cx); 
txtView.setText("3"); 
eventLayout.addView(txtview); 
TextView txtView = new TextView(cx); 
txtView.setText("4"); 
eventLayout.addView(txtview); 
TextView txtView = new TextView(cx); 
txtView.setText("5"); 

int y = txtview.getTop(); 
Log.d(TAG,"YAxis"+y);//returning 0 


eventLayout.addView(txtview); 
TextView txtView = new TextView(cx); 
txtView.setText("6"); 
eventLayout.addView(txtview); 
......... 

scview .scrollTo(0,y);///here positions giving (0,0) 

답변

4

나는 이것이 오래되었다는 것을 알고 있지만, 여기서 우리가 일하는 것을 보았습니다. 모든 뷰에는 뷰와 뷰의 계층을 관찰하는 데 사용할 수있는 ViewTreeObserver이 있습니다. ViewTreeObserver을 얻고 다음과 같이 레이아웃 변경을 수신 대기합니다. 뷰와 계층 구조가 배치되면 크기 및 위치 기반 쿼리를 수행 할 수 있습니다.

onCreate(){ 
    //Code 

    eventLayout.addView(txtview); 
    TextView txtView = new TextView(cx); 
    txtView.setText("6"); 
    eventLayout.addView(txtview) 

    //More code 

    //Observe for a layout change 
    ViewTreeObserver viewTreeObserver = eventLayout.getViewTreeObserver(); 
    if (viewTreeObserver.isAlive()) { 
    viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
     //View and it's hierarchy laid out, perform your operations 
     scview .scrollTo(0,y);///here positions giving (0,0) 
     } 
    }); 
    } 
} 
0

처럼?

또한 onCreate 함수 대신 onResume 함수에서이 코드를 실행 해 보았습니까?

1

View.getTop()onCreate()에 사용하려는 경우보기가 아직 배치되지 않았기 때문에 0이됩니다. 먼저 onCreate()이 실행을 끝내면 Android가 사물을 뽑아서 그다. 그리고 나서 사용자 이벤트를 기다리고보기 위치를 얻을 수 있습니다.

나는 전체 활동이 배치 된 직후에 뭔가를 할 수있는 깨끗한 방법을 모릅니다 (더러운 방법은 onWindowFocusChanged()을 사용하는 것입니다).

+0

나는 위의 모든 방법을 시도했지만 여전히 0,012 – ADIT

+1

@ADIT 좌표를 제공했습니다. 위의 방법은 무엇입니까? getTop() 및 getLeft()는 레이아웃 될 때까지 0을 반환합니다. 이 질문보기 : http://stackoverflow.com/questions/3947145/what-event-is-fired-after-all-views-arefully-drawn – bigstones

0

여기 listview에 투표 하겠지만 다른 옵션은 arraylist에 각 textview를 저장 한 다음 필요할 때 반복하여 각 루프의 높이를 찾는 것입니다. 그런 다음 합계 또는 계산이 무엇이든간에 값으로 스크롤하십시오.

관련 문제