2012-04-22 3 views
0

필자는 뷰의 래퍼의 viewTreeObserver에 첨부 된 OnGlobalLayoutListener를 사용하여 뷰의 래퍼의 getHeight() 함수에 대한 콜백에 의존하는 액티비티 내에 뷰가있는 안드로이드 앱을 작성하여 공간의 양을 결정했습니다 onCreate 동안 작업해야합니다. 일반적으로이 값은 아래 xml에서 chordDisplay가 요청한 400px보다 적습니다. 이것은 android 2.1 및 4.03을 사용하는 다양한 화면 크기에 대해 안드로이드 에뮬레이터에서 완벽하게 작동합니다. 그러나 내 불빛에 불이 들어 오면 콜백은 처음에는 방향을 세로로 전환하고 가로 또는 세로로 가로 또는 세로로 전환 할 때까지 가로로 앱을 시작할 때 올바른 높이를 반환하지 않습니다 (400 픽셀 미만 사용 가능). 즉, 내보기의 내용이 처음에 정확하게 크기가 조정되지 않았 음을 의미합니다.별난 불빛 레이아웃 문제

내가 처음 풍경에 응용 프로그램을 실행

샘플 로그 캣 출력 :이 일이 될 수 있는지 이해가 안

04-22 17:32:44.546: D/onGlobalLayout(12979): chordDisplay.getHeight(): 350 

:

04-22 17:31:28.249: D/onGlobalLayout(12979): chordDisplay.getHeight(): 400 

그때 나는 풍경에 다시 세로로 전환 오리 엔테이션 변경 중에 발생하는 모든 사항이 앱의 onCreate()에 대한 또 다른 호출이라고 생각하십니까? 앱을 시작할 때와 똑같은 일이 일어납니다.

비슷한 방향 전환/레이아웃 버그가있는 사람이 있습니까?/왜 이런 일이 일어날 수 있는지 생각해보십시오. 어떤 도움을 주시면 감사하겠습니다 ... 고마워.

코드 : 관련 뷰에 대한

OnGlobalLayoutListener thelistener; 
RelativeLayout chordDisplayWrapper; 
TableRow.LayoutParams lp; 
private ChordAdapter chordAdapter; 
private HorizontalListView chordDisplay 

thelistener = new OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       chordDisplayWrapper.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
       Log.d("onGlobalLayout", "chordDisplay.getHeight(): " + chordDisplay.getHeight()); 
       lp = new TableRow.LayoutParams(chordDisplay.getHeight()/6 -2,chordDisplay.getHeight()/6 -2); //6 just works. I shrink it a tiny bit to compensate for some weird bug. 
       chordAdapter = (new ChordAdapter(mcontext, R.layout.row, magicbundle, lp)); 
       chordDisplay.setAdapter(chordAdapter); 
      } 
     }; 
     chordDisplayWrapper.getViewTreeObserver().addOnGlobalLayoutListener(thelistener); 

XML 레이아웃 :

<RelativeLayout 
     android:id="@+id/chordDisplayWrapper" 
     android:layout_width="wrap_content" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:gravity="center" > 

     <berry.chordsfree.HorizontalListView 
      android:id="@+id/testerList" 
      android:layout_width="wrap_content" 
      android:layout_height="400px" 
      android:layout_centerInParent="true" 
      android:gravity="center" /> 
    </RelativeLayout> 

답변

1

당신은 지금이 문제를 해결하지만, 후에이 건너 올 수 있습니다 그 사람들을 위해 후대를 위해 게시 한 수 -

내 Nexus One에서 동일한 문제가 발생하여 사용자 정의 2.3.7 ROM을 실행하고 있지만이 코드는 내 Nexus Galaxy의 재고 4.1.1에서 작동합니다.

onCreate 중에 특정보기의 크기를 조정하려고 시도하고 있습니다. ViewTreeObserver을 사용하고 있습니다. 수동으로 dispatchGlobalLayout 번으로 전화를 시도했지만 시도가 실행되지 않아서 onGlobalLayout이 아닌 것으로 확인되었습니다. 그리고 저는 성공 요소없이 활동의 ​​onWindowFocusChanged으로 요소들을 이동하면서 놀았습니다 (그러나 나는 거기에서 많은 크기 조정을하는 것을 피하고 싶습니다). 이것은 하루 종일보다 많은 비용이 들었으므로 지금은 빨리/더티 픽스를 사용하고 있습니다. onCreate가 완료된 후 문제의 레이아웃 /보기를 조정하면 정상적으로 나타납니다.