2012-07-01 36 views
7

tôi công khai AdMob trên manifest nhưandroid AdMob thay đổi kích thước trên cảnh quan

<activity 
      android:name="com.google.ads.AdActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
      /> 

Nó được thay đổi kích cỡ đúng khi thiết bị rotacion nhưng bây giờ tôi phải thêm android:configChanges="keyboardHidden|orientation" để hoạt động có chứa AdMob để ngăn chặn hoạt động tải lại. Tôi đang tiếp cận nó nhưng bây giờ adMob không được thu nhỏ khi phong cảnh. Sự kiện onConfigChanges Giờ đây tôi có thể buộc adMob được thay đổi kích thước với kích thước cảnh quan phù hợp. Làm sao? cảm ơn bạn.

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
    } 
+0

Liên quan đến http://stackoverflow.com/questions/20929963/admob-ad-not-resizing-correctly-upon-screen-orientation-includes-pictures và http://stackoverflow.com/questions/26703152/smart -biểu ngữ-chứa-view-wont-resize –

Trả lời

10

Tôi phải đối mặt với cùng một vấn đề, nhưng tìm thấy một công việc xung quanh.

AdView của tôi nằm ở cuối trang, bên trong bố cục tương đối. Có vẻ chính xác khi được tải, vì vậy tôi giả định LayoutParams là chính xác. Để khắc phục sự cố này, tôi phải xóa mọi thứ khỏi số RelativeLayout, tạo một AdView mới và thêm tất cả lại theo đúng thứ tự, với LayoutParams gốc.

Cái gì như:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    AdView adView = (AdView)findViewById(R.id.adView); 
    View contentFrame = findViewById(R.id.contentFrameLayout); 

    RelativeLayout parent = (RelativeLayout) adView.getParent(); 
    LayoutParams mapFrameParams = contentFrame.getLayoutParams(); 
    LayoutParams adViewParams = adView.getLayoutParams(); 

    parent.removeView(adView); 
    parent.removeView(contentFrame); 

    AdView newAdView = new AdView(this, AdSize.SMART_BANNER, getString(R.string.admob_pubId)); 

    newAdView.setId(R.id.adView); 

    parent.addView(newAdView, adViewParams); 
    parent.addView(contentFrame,mapFrameParams); 
    newAdView.loadAd(new AdRequest()); 
} 

này làm việc cho tôi, nhưng vẫn cảm thấy như một hack.

+0

Ứng dụng của tôi yêu cầu hỗ trợ api level 4 nên onConfigurationChanged không được hỗ trợ. Không có cách nào khác để quản lý điều này? –

+1

Chỉ trong trường hợp ai đó cần giải pháp cho cấp api <8, bạn chỉ cần thêm @TargetApi (8) trước @Override. –

+0

Có thể là một hack, nhưng nó hoạt động. Cảm ơn – Matt

3

Hãy thử thiết lập này:

<com.google.ads.AdView 
    android:id="@+id/adView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    ads:adSize="SMART_BANNER" 
    ads:adUnitId="@string/adkey" 
    ads:loadAdOnCreate="false" 
    android:focusable="false" /> 

Các SMART_BANNER tự động lựa chọn kích thước tốt nhất và kiểu cho quảng cáo của bạn.

Trong phương thức onConfigurationChanged, bạn chỉ cần yêu cầu quảng cáo mới cho số AdView.

Lưu ý rằng bạn có thể cần phải thêm xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads".

+1

được yêu cầu lại đúng khi xoay thiết bị bằng đề xuất của bạn nhưng vẫn ở cùng kích thước – Jaume

+3

Tôi gặp vấn đề tương tự, biểu ngữ được yêu cầu lại đúng khi xoay thiết bị bằng đề xuất của bạn nhưng vẫn giữ nguyên kích thước, bạn đã sửa lỗi này chưa? – Giuseppe

+4

Tôi nghĩ rằng adView tính toán kích thước của nó khi nó được thêm vào bố cục, không phải khi nó nhận được quảng cáo (điều này sẽ tốt đẹp, tuy nhiên), vì vậy tôi nghĩ rằng đó phải là lý do tại sao điều này không hoạt động. –

3

Không đủ đại diện để trả lời trực tiếp nhưng bạn chính xác là Justin Smith. Vì Eric Leichtenschlag tuyên bố ở đây https://groups.google.com/forum/#!msg/google-admob-ads-sdk/8Ch7VmAm7RE/34Tdw6Zz4jAJ, cần phải tạo lại AdView nếu bạn đang sử dụng SMART_BANNER

Những gì tôi đã làm là xóa adView khỏi bố cục, hủy hướng dẫn, tạo lại, thêm lại vào bố cục và sau đó đưa ra AdRequest .

+2

Cảm ơn nguồn, tôi không nghĩ rằng tôi đã thấy điều đó. –

Các vấn đề liên quan