无法让 AdMob 广告选择图标显示在原生广告上
Can't get AdMob ad choices icon to show up on native ads
与此斗争了一段时间,我不知道我做错了什么。最后,我几乎根据他们的示例制作了一个示例项目,但仍然看不到广告选择图标。
这是显示广告的代码:
AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
@Override
public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
// Assumes you have a placeholder FrameLayout in your View layout
// (with id fl_adplaceholder) where the ad is to be placed.
// FrameLayout frameLayout =
// findViewById(R.id.fl_adplaceholder);
// Assumes that your ad layout is in a file call ad_unified.xml
// in the res/layout folder
UnifiedNativeAdView adView = (UnifiedNativeAdView) getLayoutInflater()
.inflate(R.layout.native_ad_layout_generic_lineartest_unified, null);
// This method sets the text, images and the native ad, etc into the ad
// view.
TextView title = adView.findViewById(R.id.native_ad_title);
title.setText(unifiedNativeAd.getHeadline());
adView.setHeadlineView(title);
TextView text = adView.findViewById(R.id.native_ad_text);
text.setText(unifiedNativeAd.getBody());
adView.setBodyView(text);
ImageView image = adView.findViewById(R.id.native_ad_icon_image);
image.setImageDrawable(unifiedNativeAd.getIcon().getDrawable());
adView.setIconView(image);
Button button = adView.findViewById(R.id.native_call_to_action);
button.setText(unifiedNativeAd.getCallToAction());
adView.setCallToActionView(button);
adView.setNativeAd(unifiedNativeAd);
main.addView(adView);
}
})
.withAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(int errorCode) {
Log.w(TAG, "" + errorCode);
}
})
.withNativeAdOptions(new NativeAdOptions.Builder()
// Methods in the NativeAdOptions.Builder class can be
// used here to specify individual options settings.
.build())
.build();
adLoader.loadAd(new AdRequest.Builder().build());
这是我的测试本机布局:
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.ads.formats.UnifiedNativeAdView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark">
<LinearLayout
android:id="@+id/relativeLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@color/colorPrimary"
android:gravity="center"
android:minWidth="300dp"
android:padding="8dp">
<!--<ImageView
android:id="@+id/native_ad_main_image"
android:layout_width="@dimen/banner_height_large"
android:layout_height="@dimen/banner_height_large"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
/>-->
<android.support.v7.widget.AppCompatImageView
android:id="@+id/native_ad_icon_image"
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@null"
android:scaleType="fitXY"
/>
<TextView
android:id="@+id/native_ad_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="4dp"
android:alpha="0.87"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/white"
android:textSize="12sp"
/>
<TextView
android:id="@+id/native_ad_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:layout_marginTop="4dp"
android:alpha="0.54"
android:ellipsize="end"
android:maxLines="4"
android:textColor="@color/white"
android:textSize="10sp"
/>
<Button
android:id="@+id/native_call_to_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/colorAccent"
android:textSize="10sp"
/>
</LinearLayout>
</com.google.android.gms.ads.formats.UnifiedNativeAdView>
我将其添加到如下所示的 LinearLayout 中:
<LinearLayout
android:id="@+id/main_view"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
/>
</LinearLayout>
这就是它最终的样子(我知道它说的是 mopub 测试,因为这是针对 mopub 的,但在无法让它显示那里的图标后,我继续尝试没有 mopub) .
编辑:测试广告单元是否可能不显示该图标?
编辑:以防万一不清楚,我说的是通常出现在右上角的图标,上面提到它是广告。这是一个例子。
这是我的广告代码。您可以在广告视图中使用所有可能性。
<com.google.android.gms.ads.formats.UnifiedNativeAdView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/adview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:background="#FFFFFF"
android:minHeight="50dp"
android:orientation="vertical">
<TextView style="@style/AppTheme.AdAttribution"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="3dp">
<ImageView
android:id="@+id/ad_image"
android:layout_width="match_parent"
android:layout_height="270dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:scaleType="centerCrop"/>
<com.google.android.gms.ads.formats.MediaView
android:id="@+id/ad_media"
android:layout_gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="270dp"
android:layout_marginTop="5dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ad_app_icon"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_marginLeft="-8dp"
android:paddingTop="16dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Title02Bold"
android:paddingTop="16dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/ad_advertiser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="bottom"
style="@style/Title02Bold"/>
<RatingBar
android:id="@+id/ad_stars"
android:visibility="invisible"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:isIndicator="true"
android:numStars="5"
android:stepSize="0.5" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="40dp">
<TextView
android:id="@+id/ad_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_marginEnd="20dp"
style="@style/Title03Neutral"
android:paddingTop="8dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_gravity="end"
android:orientation="horizontal"
android:paddingBottom="10dp"
android:paddingTop="10dp">
<TextView
android:id="@+id/ad_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingStart="5dp"
android:paddingRight="5dp"
android:paddingEnd="5dp"
android:textSize="12sp" />
<TextView
android:id="@+id/ad_store"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingStart="5dp"
android:paddingRight="5dp"
android:paddingEnd="5dp"
android:textSize="12sp" />
<Button
android:id="@+id/ad_call_to_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</com.google.android.gms.ads.formats.UnifiedNativeAdView>
我认为你想要使用的是 <TextView style="@style/AppTheme.AdAttribution"/>
这是Style
:
<style name="AppTheme.AdAttribution">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">left</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:textSize">12sp</item>
<item name="android:text">@string/ad_attribution</item>
<item name="android:background">#FFCC66</item>
<item name="android:width">15dp</item>
<item name="android:height">15dp</item>
</style>
<string name="ad_attribution">Ad</string>
如果这对你有帮助,请告诉我。
它对我有用(AdmobNativeItem 是我的习惯 class):
AdLoader adLoader = new AdLoader.Builder(context, unitID)
.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
@Override
public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
UnifiedNativeAdView adView = (UnifiedNativeAdView) LayoutInflater
.from(activity)
.inflate(R.layout.admob_content_native_ad, null, false);
AdmobNativeItem nativeItem = new AdmobNativeItem(unifiedNativeAd, adView);
}
})
.withNativeAdOptions(new NativeAdOptions.Builder()
.setRequestCustomMuteThisAd(true)
.setAdChoicesPlacement(ADCHOICES_BOTTOM_LEFT)
.build())
.build();
adLoader.loadAd(new AdRequest.Builder().build());
有关 ADCHOICES_BOTTOM_LEFT 的文档请参阅 setAdChoicesPlacement()
在 AdmobNativeItem 中:
if (unifiedNativeAd.getAdChoicesInfo() != null){
AdChoicesView choicesView = new AdChoicesView(unifiedNativeAdView.getContext());
unifiedNativeAdView.setAdChoicesView(choicesView);
}
与此斗争了一段时间,我不知道我做错了什么。最后,我几乎根据他们的示例制作了一个示例项目,但仍然看不到广告选择图标。
这是显示广告的代码:
AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
@Override
public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
// Assumes you have a placeholder FrameLayout in your View layout
// (with id fl_adplaceholder) where the ad is to be placed.
// FrameLayout frameLayout =
// findViewById(R.id.fl_adplaceholder);
// Assumes that your ad layout is in a file call ad_unified.xml
// in the res/layout folder
UnifiedNativeAdView adView = (UnifiedNativeAdView) getLayoutInflater()
.inflate(R.layout.native_ad_layout_generic_lineartest_unified, null);
// This method sets the text, images and the native ad, etc into the ad
// view.
TextView title = adView.findViewById(R.id.native_ad_title);
title.setText(unifiedNativeAd.getHeadline());
adView.setHeadlineView(title);
TextView text = adView.findViewById(R.id.native_ad_text);
text.setText(unifiedNativeAd.getBody());
adView.setBodyView(text);
ImageView image = adView.findViewById(R.id.native_ad_icon_image);
image.setImageDrawable(unifiedNativeAd.getIcon().getDrawable());
adView.setIconView(image);
Button button = adView.findViewById(R.id.native_call_to_action);
button.setText(unifiedNativeAd.getCallToAction());
adView.setCallToActionView(button);
adView.setNativeAd(unifiedNativeAd);
main.addView(adView);
}
})
.withAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(int errorCode) {
Log.w(TAG, "" + errorCode);
}
})
.withNativeAdOptions(new NativeAdOptions.Builder()
// Methods in the NativeAdOptions.Builder class can be
// used here to specify individual options settings.
.build())
.build();
adLoader.loadAd(new AdRequest.Builder().build());
这是我的测试本机布局:
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.ads.formats.UnifiedNativeAdView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark">
<LinearLayout
android:id="@+id/relativeLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@color/colorPrimary"
android:gravity="center"
android:minWidth="300dp"
android:padding="8dp">
<!--<ImageView
android:id="@+id/native_ad_main_image"
android:layout_width="@dimen/banner_height_large"
android:layout_height="@dimen/banner_height_large"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
/>-->
<android.support.v7.widget.AppCompatImageView
android:id="@+id/native_ad_icon_image"
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@null"
android:scaleType="fitXY"
/>
<TextView
android:id="@+id/native_ad_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="4dp"
android:alpha="0.87"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/white"
android:textSize="12sp"
/>
<TextView
android:id="@+id/native_ad_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:layout_marginTop="4dp"
android:alpha="0.54"
android:ellipsize="end"
android:maxLines="4"
android:textColor="@color/white"
android:textSize="10sp"
/>
<Button
android:id="@+id/native_call_to_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/colorAccent"
android:textSize="10sp"
/>
</LinearLayout>
</com.google.android.gms.ads.formats.UnifiedNativeAdView>
我将其添加到如下所示的 LinearLayout 中:
<LinearLayout
android:id="@+id/main_view"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
/>
</LinearLayout>
这就是它最终的样子(我知道它说的是 mopub 测试,因为这是针对 mopub 的,但在无法让它显示那里的图标后,我继续尝试没有 mopub) .
编辑:测试广告单元是否可能不显示该图标?
编辑:以防万一不清楚,我说的是通常出现在右上角的图标,上面提到它是广告。这是一个例子。
这是我的广告代码。您可以在广告视图中使用所有可能性。
<com.google.android.gms.ads.formats.UnifiedNativeAdView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/adview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:background="#FFFFFF"
android:minHeight="50dp"
android:orientation="vertical">
<TextView style="@style/AppTheme.AdAttribution"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="3dp">
<ImageView
android:id="@+id/ad_image"
android:layout_width="match_parent"
android:layout_height="270dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:scaleType="centerCrop"/>
<com.google.android.gms.ads.formats.MediaView
android:id="@+id/ad_media"
android:layout_gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="270dp"
android:layout_marginTop="5dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ad_app_icon"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_marginLeft="-8dp"
android:paddingTop="16dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Title02Bold"
android:paddingTop="16dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/ad_advertiser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="bottom"
style="@style/Title02Bold"/>
<RatingBar
android:id="@+id/ad_stars"
android:visibility="invisible"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:isIndicator="true"
android:numStars="5"
android:stepSize="0.5" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="40dp">
<TextView
android:id="@+id/ad_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_marginEnd="20dp"
style="@style/Title03Neutral"
android:paddingTop="8dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_gravity="end"
android:orientation="horizontal"
android:paddingBottom="10dp"
android:paddingTop="10dp">
<TextView
android:id="@+id/ad_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingStart="5dp"
android:paddingRight="5dp"
android:paddingEnd="5dp"
android:textSize="12sp" />
<TextView
android:id="@+id/ad_store"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingStart="5dp"
android:paddingRight="5dp"
android:paddingEnd="5dp"
android:textSize="12sp" />
<Button
android:id="@+id/ad_call_to_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</com.google.android.gms.ads.formats.UnifiedNativeAdView>
我认为你想要使用的是 <TextView style="@style/AppTheme.AdAttribution"/>
这是Style
:
<style name="AppTheme.AdAttribution">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">left</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:textSize">12sp</item>
<item name="android:text">@string/ad_attribution</item>
<item name="android:background">#FFCC66</item>
<item name="android:width">15dp</item>
<item name="android:height">15dp</item>
</style>
<string name="ad_attribution">Ad</string>
如果这对你有帮助,请告诉我。
它对我有用(AdmobNativeItem 是我的习惯 class):
AdLoader adLoader = new AdLoader.Builder(context, unitID)
.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
@Override
public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
UnifiedNativeAdView adView = (UnifiedNativeAdView) LayoutInflater
.from(activity)
.inflate(R.layout.admob_content_native_ad, null, false);
AdmobNativeItem nativeItem = new AdmobNativeItem(unifiedNativeAd, adView);
}
})
.withNativeAdOptions(new NativeAdOptions.Builder()
.setRequestCustomMuteThisAd(true)
.setAdChoicesPlacement(ADCHOICES_BOTTOM_LEFT)
.build())
.build();
adLoader.loadAd(new AdRequest.Builder().build());
有关 ADCHOICES_BOTTOM_LEFT 的文档请参阅 setAdChoicesPlacement()
在 AdmobNativeItem 中:
if (unifiedNativeAd.getAdChoicesInfo() != null){
AdChoicesView choicesView = new AdChoicesView(unifiedNativeAdView.getContext());
unifiedNativeAdView.setAdChoicesView(choicesView);
}