2013-01-23 2 views
1

< 편집>안드로이드는 정확한 폭을 측정해야

  1. 새로운 관찰 -과 - 나도 같은 혼자 활동을 서로하고 AppWidget 구성보기로 ViewPager을 시도했습니다 구성보기로 자주 충돌하는 반면, 지속적으로 잘 작동합니다.

  2. 또 다른 관찰 - 구성 레이아웃이 ViewPager 인 경우 충돌이 발생하지 않습니다. ViewPager가 FlowLayout 또는 RelativeLayout에 포함 된 경우 자주 충돌합니다.

</편집>

내 AppWidget 구성 XML에 PagerTabStrip와 V4의 ViewPager를 사용하고, 그리고 그것을 완벽하게 대부분의 시간을 작동합니다.

-

java.lang.IllegalStateException: Must measure with an exact width 
    at android.support.v4.view.PagerTitleStrip.onMeasure(PagerTitleStrip.java:428) 
    at android.view.View.measure(View.java:8335) 
    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1350) 
    at android.view.View.measure(View.java:8335) 
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017) 
    ...etc... 

android.support.v4.view.PagerTitleStrip.onMeasure()에서 코드 :

는 그러나, 나는 몇 가지 처리가보기를로드하는 동안 참여 (응용 프로그램 충돌)이 오류

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    final int widthMode = MeasureSpec.getMode(widthMeasureSpec); 
    //... 

    if (widthMode != MeasureSpec.EXACTLY) { 
     throw new IllegalStateException("Must measure with an exact width"); 
    } 
    //... 
} 

어떻게 widthMode를 제어 할 수 있습니까 ??

위의 모든 스택이 내 코드 외부에서 발생합니다.

내 코드에서

나는 많은 요인을 배제하기 위해 노력했습니다, 결국 나는 근본 원인 분리 관리해야 할 수 있습니다 : 나는 조각 당 5 milis 수면의 모의 "일을"(추가 해요 때

을 X30 조각), 위의 오류가 발생하고 제거 할 때 오류가 사라진 것처럼 보입니다. 이는 나중에 초기 값을 설정 (내 실제 어댑터의 조각을하고있어 실제 작업을 최소화하고 피할 수없는 차이

public static class TestFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, 
      ViewGroup container, Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.splash, container, false); 
     try { 
      Thread.sleep(5); // << mock work causes quite consistent error 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Log.i(TAG, "..onCreateView"); 

     return v; 
    } 
} 

을하지 않았다 - 은에서 onCreate()에 작업을 이동 시도 백그라운드 스레드에서 데이터 채우기). 그래서 나는 얼마나 많은 것을 배경 스레드로 연기 할 수 있는지 모른다.

누구나이 경험이 있습니까? 왜 위의 오류가 발생하는지, 그리고 그것을 피할 수 있는지 알고 싶습니다. 참고로

(확실하지 그것은 관련이있는 경우) :

<LinearLayout ...> 
<android.support.v4.view.ViewPager 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:id="@+id/aw_pager" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1.0" 
    android:background="@drawable/dialog_full_holo_dark" 
    android:fadingEdge="horizontal" 
    android:fadingEdgeLength="40dp" > 

    <android.support.v4.view.PagerTabStrip 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" /> 
</android.support.v4.view.ViewPager> 
</LinearLayout> 

답변

0

마지막에 해결! (2 일이 낭비) :

android:background="@drawable/dialog_full_holo_dark" 

내가 그것을 대체 :

android:background="@color/black" 

하고 문제가 사라 그것은이 줄을이었다.
아무 것도 오류를 제안하지 않았으며 결정적이지 않았습니다. 제거로 어려운 방법을 해결 - 코드> 테스트> 다시 추가 ...

Android 코드의 버그 일 가능성이 높습니다. 아마도 레이아웃 관리의 일부 경쟁 조건 일 수 있습니다.

희망 나는 동료 devs를 위해 부딪 치는 2 일을 여기에서 저장했다.

[업데이트] 나는 FrameLayout으로 ViewPager 포장하여이 버그를 해결했습니다 다른 프로젝트에서

. 내가 필요한 배경을 FrameLayout으로 설정하고 @color/transparentViewPager으로 설정합니다. 나도이 문제를 가지고 나는 단순히 줄을 추가하여 그것을 해결

public class PagerTabStripBugfix extends PagerTabStrip { 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(
       MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), 
       heightMeasureSpec); 
    }  


} 
0

이것은 매우 간단하고 작품이다

xmlns:tools="http://schemas.android.com/tools" 
+0

감사합니다. 전 9 개월 전에이 문제를 해결했지만 다른 사람들에게 도움이 될 수 있습니다. 왜이 코드가 문제를 해결하는지 설명해 주시겠습니까? – auval

0

:

+0

감사합니다. 현재 검증을 위해 테스트 할 수는 없지만 앞으로는 그렇게 할 것입니다. – auval

+0

다른 프로젝트에서 동일한 문제가 발생하여 Google 검색에서 내 자신의 게시물을 발견했습니다. 그래서 저는 확인할 수있는 기회를 가졌습니다. 슬프게도 제 경우에는 효과가 없었습니다. – auval

0

내가 android.support.v4.view.PagerTitleStrip를 추가 할 때이 오류가 나에게 일어난 actionbarsherlock. 해당 태그에 android:layout_gravity="top"을 추가하여이 문제를 해결했습니다.

+0

을 'android.support.v4.view.PagerTabStrip' 태그에 추가 하시겠습니까? (내 경우에는 해결되지 않았다) – auval