我不知道这里发生了什么,但我试图通过下面的代码动态设置我的广告单元ID,并将其从XML中删除但仍然得到错误:
必须在调用loadAd之前设置广告尺寸和广告单元ID.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="SMART_BANNER">
</com.google.android.gms.ads.AdView>
Run Code Online (Sandbox Code Playgroud)
和
AdView mAdView = (AdView) rootView.findViewById(R.id.adView);
mAdView.setAdUnitId(getEvent().getAdMobUnitId());
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud) 我的Andorid应用程序离线和在线工作.它在在线模式下显示广告.在它处于离线模式并且用户打开互联网连接的情况下,我想知道广告是否已经加载.如果没有,那么我会加载一个新广告.我查看了AdMob API(AdView类)但无法找到执行此操作的内容.
AdListener
根据@Hounshell的回答,这是我的实现.但是这里实现的方法都没有被执行.
adView.setAdListener(new AdListener() {
@Override
public void onReceiveAd(Ad arg0) {
Toast.makeText(act, "Ad received",Toast.LENGTH_LONG).show();
}
@Override
public void onPresentScreen(Ad arg0) {
}
@Override
public void onLeaveApplication(Ad arg0) {
// TODO Auto-generated method stub
}
@Override
public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {
Toast.makeText(act, "Failed to receive Ad",Toast.LENGTH_LONG).show();
}
@Override
public void onDismissScreen(Ad arg0) {
// TODO Auto-generated method stub
}
});
Run Code Online (Sandbox Code Playgroud)
以及涵盖AdView的main.xml的一部分
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="50dp"
>
<com.google.ads.AdView
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/adView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
ads:adSize="BANNER"
ads:adUnitId="xxxxxxxxxxxxxxxx"
ads:loadAdOnCreate="true" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud) 我可能已阅读所有帖子和文档,但我仍然无法解决这个问题.
我想使用addView()方法将视图添加到现有(运行)布局,但由于某种原因我不能.我知道这应该是简单和基本但我仍然无法做到.所以,请帮帮我.
这是一个代码:
LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
TextView text = new TextView(this);
text.setText("test");
layout.addView(text);
Run Code Online (Sandbox Code Playgroud)
这是一个代码,结果是我只显示了在xml文件中定义的视图.我没有添加这个新视图.当我调试时,我看到这个添加的视图作为我添加它的父项的子项,但它没有显示.
这是main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/main1" >
<TextView android:id="@+id/app_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:text="@string/app_title"
android:textSize="25dp"
android:gravity="center_horizontal"/>
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="@string/main_screen_counter_title"
android:textSize="15dp"
android:textColor="#FFF"
android:gravity="center_horizontal"/>
<TextView android:id="@+id/frontScreenCounter"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:text="@string/reading"
android:textSize="33dp"
android:gravity="center_horizontal" />
<GridView android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="3"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:textColor="#888"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
请帮忙.这会让我疯了!
我正在使用AdView和LeakCanary.托管adView的片段在onDestroy中调用adView.destroy(),但LeakCanary显示托管此片段的Activity被com.google.android.gms.common.api.aaai泄露.堆转储还显示存在内存泄漏.当我删除AdView.loadAd()并且不在片段中加载广告时 - 没有泄漏.有什么想法或建议吗?谢谢.
我正在使用Google Admob SDK v6.1.0(https://developers.google.com/mobile-ads-sdk/download),并以编程方式(不是以XML格式)实例化com.google.ads.AdView,并添加它在我的Activity中动态地变成LinearLayout.
我的一位用户报告说,当他们在我的Activity中点击Home按钮时(为了让它背景),他们开始看到来自我的应用程序的高CPU使用率.我能够在Jellybean平台上重现这一点,并注意到高CPU使用率的来源是WebViewCoreThread.
我的Activity根本不使用任何WebView,但我能够逐步完成Activity的初始化,并注意到当我实例化AdMob AdView对象时,此WebViewCoreThread会启动.作为AdMob引用中的状态,我在Activity的onDestroy()方法中调用此AdView上的destroy().我改变了我的代码,在我的onPause()方法中调用了AdView.onDestroy().但似乎没有任何因素导致WebViewCoreThread停止.我猜,如果那个线程坚持下去,我没关系.但是,如果我反复多次启动我的Activity,这个线程开始使用我的CPU的8%到25%之间的任何地方,即使我的活动不在前台.
我注意到其他一些用户说你必须调用WebView.onPause()作为纠正措施.(http://stackoverflow.com/questions/2040963/webview-threads-never-stop-webviewcorethread-cookiesyncmanager-http0-3)但这对我来说不是直接可行的,因为我的网页视图是由AdMob的AdView创建的.我还改变了我的代码,调用.removeAllViews()为mt Admob AdView的容器LinearLayout对象,然后调用System.gc()强制垃圾收集,但似乎什么都没有杀死我的WebViewCoreThread并最终开始吃掉CPU直到我强行 - 杀了我的应用程序.
AdMob为什么这样做的任何线索,以及我如何强制杀死这个线程?
我附加了一个我创建的类来封装AdView的创建和销毁.我在我的活动的初始化中调用了这个类的getNewAd()方法.我在Activity的onPause()和onDestroy()方法中调用了这个类的removeAd():
package com.shiprack.client;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
import com.mobclix.android.sdk.Mobclix;
import com.mobclix.android.sdk.MobclixMMABannerXLAdView;
import android.app.Activity;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
public class AdManager {
public AdManager(EventLog logger, LinearLayout container, Activity activity) {
_container = container;
_activity = activity;
_eventLogger = logger;
}
public void setNetwork(int network) {
_network = network;
}
public void getNewAd() {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
params.gravity = Gravity.CENTER;
switch (_network) { …
Run Code Online (Sandbox Code Playgroud) 我正在使用适用于Android的Google AdMob Ads SDK 4.0.4
默认情况下,在加载广告之前,AdView将没有大小.如果广告上方或下方有按钮,则可能会出现问题.
如果广告在他们即将点击按钮的确切时刻返回,则用户可能会意外点击该广告.
在旧的admob SDK中,我使用setGoneWithoutAd(false)解决了这个问题.这样,即使广告尚未退回,也会保留空间.
在新的SDK(Google Admob Ads SDK 4.0.4)中,我设法通过使用此快速修复程序执行相同的操作:通过将广告放入宽度为"320dp"且高度为"50dp"的某些布局来保留空间
<LinearLayout
android:layout_width="320dp"
android:layout_height="50dp" >
<com.google.ads.AdView android:id="@+id/adview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adUnitId="xxxxxxxxxxx"
ads:adSize="BANNER"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
它有效,但我不确定这是否是一个正确的方法.(我会遇到着名的"没有足够的空间来展示广告!"问题吗?)
总结一个问题:即使在请求广告时,如何(正确)使AdView"占用"空间?
先感谢您!
我正在尝试以编程方式将adUnitId设置为来自新版Google Play服务(旧版AdMob)的广告.
我有这个XML(用于<include>
):
<com.google.android.gms.ads.AdView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:adSize="BANNER"/>
Run Code Online (Sandbox Code Playgroud)
这在onCreate()中:
AdView mAdview = (AdView)findViewById(R.id.adView);
mAdview.setAdUnitId(((App)getApplication()).getAdmobKey());
mAdview.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
findViewById(R.id.adView).setVisibility(View.VISIBLE);
}
});
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
mAdview.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud)
我得到:
必须在调用loadAd之前设置广告尺寸和广告单元ID.
所以第二种选择是以编程方式制作广告.
新的XML:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/adView"
/>
Run Code Online (Sandbox Code Playgroud)
新代码:
AdView mAdview = new AdView(this);
...
((LinearLayout)findViewById(R.id.adView)).addView(mAdview);
mAdview.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的错误.
我还尝试从com.google.android.gms.ads.AdView继承来制作自定义视图,但这是最终的.
有什么建议吗?
我有一个webview我正在加载自定义HTML使用loadDataWithBaseURL
:
mArticleWebView.loadDataWithBaseURL("http://www.example.com/", htmlString, "text/html", "utf-8", null);
Run Code Online (Sandbox Code Playgroud)
这将适用于多个页面,然后事件在WebView中停止触发,因为平板电脑上的Jelly Bean似乎没有理由,并且Web的视图将是空白的.
这个WebViewCreation
代码:
private void prepareWebView() {
mArticleWebView.setBackgroundColor(getResources().getColor(R.color.white));
mArticleWebView.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);
mArticleWebView.addJavascriptInterface(new ArticleJavaScriptInterface(getActivity()), "Company");
mArticleWebView.setWebChromeClient(new CustomChromeClient());
/* WebViewClient must be set BEFORE calling loadUrl! */
mArticleWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favi) {
Log.e(TAG, "Signs of life, shock and awe.");
super.onPageStarted(view, url, favi);
}
@Override
public void onPageFinished(WebView view, String url) {
Log.e(TAG, "onPageFinished..." + url);
super.onPageFinished(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { …
Run Code Online (Sandbox Code Playgroud) 再给这个社区带来机会,我的最新问题从来没有得到回答
好吧,我有一个游戏,游戏有一个暂停按钮,隐藏大部分游戏界面只是在中间显示暂停文本.有太多的自由空间,所以我想在底部放一个横幅,直到再次按下暂停按钮并恢复游戏.
我知道如何制作横幅广告:
//When pause button is pressed
AdView adView = (AdView) this.findViewById(R.id.adView);
adView.setVisibility (View.VISIBLE);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何再次按下暂停按钮时停止它们,就是这样:
adView.setVisibility (View.GONE);
Run Code Online (Sandbox Code Playgroud)
我很确定adView不会停止仅使用此行发出请求.
我在这里看到一些关于这个的问题,但看起来他们使用的是旧的admob SDK版本
有人可以,请帮帮我吗?
谢谢
我的申请中有7项活动.我想在每个活动中展示admob
我是否必须在每个活动中创建每个AdView?
要么
是否有任何替代方法可以重用以前的活动容器或防止它被破坏,所以我可以在下一个活动中使用....
任何代码或提示我们都会欣赏.
Thankx
adview ×10
android ×10
admob ×8
api ×1
banner-ads ×1
java ×1
layout ×1
memory-leaks ×1
view ×1
viewgroup ×1