CardView 中的 NativeExpressAdView

NativeExpressAdView in a CardView

<LinearLayout
    orientation="vertical">
...
   <android.support.v7.widget.CardView
        android:id="@+id/card_pitch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        card_view:cardCornerRadius="0dp">

        <com.google.android.gms.ads.NativeExpressAdView
            android:id="@+id/adview_small_light"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:visibility="gone"
            ads:adSize="FULL_WIDTHx100"
            ads:adUnitId="xxx">
        </com.google.android.gms.ads.NativeExpressAdView>

    </android.support.v7.widget.CardView>
1-11 16:21:22.211 28899-28899/? W/Ads: Not enough space to show ad. Needs 411x100 dp, but only has 379x385 dp.
11-11 16:21:22.211 28899-28899/? W/Ads: Not enough space to show ad. Needs 411x100 dp, but only has 379x100 dp.
11-11 16:21:22.211 28899-28899/? W/Ads: Not enough space to show ad. Needs 411x100 dp, but only has 379x173 dp.
11-11 16:21:22.211 28899-28899/? W/Ads: Not enough space to show ad. Needs 411x100 dp, but only has 379x100 dp.

广告不显示,CardView 的边距有问题FULL_WIDTH。有没有办法做到这一点?在 CardView 上显示已使用 FULL_WIDTH 和一些边距的添加。我也试过在父 LinearLayout 上放置填充和边距而不是 CardView 上的边距,但有同样的问题。

FULL_WIDTH 常量指定广告应占据设备屏幕的整个宽度。在您的情况下,没有足够的空间容纳广告,因为它的一些祖先引入了额外的水平填充。为实现您的目标,您可以确定运行时的宽度。您需要做的就是计算设备的宽度并减去正确的填充量。例如:

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
width = displayMetrics.widthPixels / displayMetrics.density;
adView.setAdSize(new AdSize(width - padding, 100));

请务必注意,此处的值是倾斜的(与密度无关的像素)而不是像素。