今日、AdMobから次のようなメールが届きました。
ネイティブ広告ポリシーへの変更:ネイティブ広告では、動画またはメインの画像アセットをレンダリングするためにMediaViewが必要になります。より良い広告体験をより簡単に提供できるようにするため、10月29日以降、ネイティブ広告ではMediaViewが動画またはメインの画像アセットをレンダリングする必要があります。この日付までに準拠していない広告ユニットは広告の配信を停止し、広告収益に影響を与える可能性があります。
Androidアプリでこれを試し、ImageView
の画像とMediaView
の動画の個別の処理を削除しましたが、MediaViewはそうではないことがわかりました表示される画像の高さに応じて、ビューの高さのサイズを変更します。
this Googleのcodelabの例では、MediaView
の固定の高さと幅が使用されています。この画面は画面サイズに反応するため、これはできません。画面サイズはデバイスによって異なります。画像のサイズを動的に変更できるという事実は、バナーなどの事前定義された広告の代わりにUnifiedNativeAds
を使用する主な利点の1つです。
これは、幅にmatch_parent
を使用し、高さにwrap_content
を使用して、MediaView
を表示する必要がある方法です。
<com.google.Android.gms.ads.formats.MediaView
Android:id="@+id/ad_media"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:adjustViewBounds="true"
Android:scaleType="fitXY"/>
これは私が必要としているものであり、wrap_content
を使用するとどのように見えるかを期待しています
ImageViewを使用して画像を個別にレンダリングできた前のケースでは、wrap_content
値が画像のサイズを正しく設定していました。
誰かがこれの回避策を持っていますか? MediaView
の高さをハードコーディングせずに、新しいGoogleの要件に準拠するにはどうすればよいですか。
私の完全なコードは、githubのデモアプリにあります ここ 。
mediaView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
@Override
public void onChildViewAdded(View parent, View child) {
if (child instanceof ImageView) {
ImageView imageView = (ImageView) child;
imageView.setAdjustViewBounds(true);
}
}
@Override
public void onChildViewRemoved(View parent, View child) {}
});
同じ問題に直面していました。試行錯誤を繰り返した結果、ラッピング<FrameLayout...>
(UnifiedNativeAdView
を追加している)とScrollView
を使用すると、この問題が解決します。
for (int i = 0; i < mediaView.getChildCount(); i++) {
View view = mediaView.getChildAt(i);
if (view instanceof ImageView) {
((ImageView) view).setAdjustViewBounds(true);
}
}
これは私にとってはうまくいきます。私はリチャードの答えを試しましたが、RecyclerViewではうまくいきませんでした。