2013-12-10 2 views
0

활동 시작과 동시에 고정 크기로 유지되도록 AdView에 초기 크기를 지정하는 방법이 있습니까? 지금은 광고가로드 될 때마다 변경되므로 내 렌더러 onsurfaceChanged 함수가 액티비티를 시작하면 두 번 호출되어 일부 초기화가 twue로 실행됩니다.활동 시작시 AdView의 크기가 고정되도록 설정

나는이 문제를 해결할 수 있지만 인플레이션시 배너에 고정 된 크기를 할당하는 간단한 방법이 있다면 매우 쉽습니다. 배너 크기의 딥 값을 하드 코딩하지 않기를 원합니다. 내에서 AdView는 아래의 XML에 의해 초기화됩니다 :

<com.google.ads.AdView 
     android:id="@+id/adView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     ads:adSize="SMART_BANNER" 
     ads:adUnitId="unit_id" 
     ads:loadAdOnCreate="true" 
     ads:testDevices="device_id" 
     android:visibility="visible" > 
    </com.google.ads.AdView> 

장치/단위 ID는 분명히 문제를 해결할 수 무고한 (나)

답변

1

일부 엉성한 답변을 찾았습니다. 하드 코드 된 값을 피하고 순수하게 XML로 AdView를 만들 수 있습니다. 관심있는 사람들은 아래 제공 :

나는 AdView가이 서브 클래스 생성 :

public class MyAdView extends AdView { 


public MyAdView(Activity activity, AdSize adSize, String adUnitId) { 
    super(activity, adSize, adUnitId); 
    // TODO Auto-generated constructor stub 
} 

public MyAdView(Activity activity, AdSize[] adSizes, String adUnitId) { 
    super(activity, adSizes, adUnitId); 
    // TODO Auto-generated constructor stub 
} 

public MyAdView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
} 

public MyAdView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 
@Override 
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec){ 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    Context ctx=getContext(); 
    AdSize testSize=AdSize.createAdSize(AdSize.SMART_BANNER, ctx); //Need to do this because the final static variable SMART_BANNER has buggy behaviour and returns a negative size if you don't. 
    int height=testSize.getHeightInPixels(ctx); 
    int width=testSize.getWidthInPixels(ctx); 
    setMeasuredDimension(width, height); 
} 

}

과의 XML 뷰 (IDS 다시 변경) 변경 :

<packagename.MyAdView 
     android:id="@id/adView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     ads:adSize="SMART_BANNER" 
     ads:adUnitId="unitId" 
     ads:loadAdOnCreate="true" 
     ads:testDevices="deviceId" 
     android:visibility="visible" > 
    </packagename.MyAdView> 

이 포함을 내 레이아웃에서 이제 코드없이 AdView의 고정 크기를 얻을 수 있습니다.

0

가 설정 될 수 있습니다 높이를 보호하고 인플레이션에 동적으로 너비로 변경되었습니다.

adView.setLayoutParams(new LinearLayout.LayoutParams(width, height)); //Change LinearLayout to something else if your adview is in another layout