Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在活动开始时使AdView具有固定大小_Android_Xml_Adview - Fatal编程技术网

Android 在活动开始时使AdView具有固定大小

Android 在活动开始时使AdView具有固定大小,android,xml,adview,Android,Xml,Adview,是否有一种方法可以强制AdView在活动开始时立即获取其初始大小并保持在该固定大小。正如现在一样,它在加载广告时会发生变化,这意味着在启动活动时会调用两次my Renders onsurfaceChanged函数,这会导致一些初始化在两次之后运行 我可以解决这个问题,但如果有一个简单的方法来为通胀大旗指定一个固定的大小,这将非常容易。我不希望硬编码横幅大小的dip值。我的AdView由以下xml初始化: <com.google.ads.AdView android:

是否有一种方法可以强制AdView在活动开始时立即获取其初始大小并保持在该固定大小。正如现在一样,它在加载广告时会发生变化,这意味着在启动活动时会调用两次my Renders onsurfaceChanged函数,这会导致一些初始化在两次之后运行

我可以解决这个问题,但如果有一个简单的方法来为通胀大旗指定一个固定的大小,这将非常容易。我不希望硬编码横幅大小的dip值。我的AdView由以下xml初始化:

    <com.google.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="unit_id"
        ads:loadAdOnCreate="true"
        ads:testDevices="device_id"
        android:visibility="visible" >
    </com.google.ads.AdView>


设备/单元ID明显改变,以保护无辜者(me)

可根据充气动态设置高度和宽度,从而解决您的问题

 adView.setLayoutParams(new LinearLayout.LayoutParams(width, height)); //Change LinearLayout to something else if your adview is in another layout 

经过一番胡闹,我找到了自己的答案。它避免了硬编码的值,并允许我纯粹用xml创建AdView。以下提供给感兴趣的任何人:

我创建了AdView的这个子类:

public class MyAdView extends AdView {


public MyAdView(Activity activity, AdSize adSize, String adUnitId) {
    super(activity, adSize, adUnitId);
    // TODO Auto-generated constructor stub
}

public MyAdView(Activity activity, AdSize[] adSizes, String adUnitId) {
    super(activity, adSizes, adUnitId);
    // TODO Auto-generated constructor stub
}

public MyAdView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    // TODO Auto-generated constructor stub
}

public MyAdView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec){
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    Context ctx=getContext();
    AdSize testSize=AdSize.createAdSize(AdSize.SMART_BANNER, ctx); //Need to do this because the final static variable SMART_BANNER has buggy behaviour and returns a negative size if you don't.
    int height=testSize.getHeightInPixels(ctx);
    int width=testSize.getWidthInPixels(ctx);
    setMeasuredDimension(width, height);
}
}

并将xml视图更改为(ID再次更改):



在我的布局中包括这个,我现在可以为我的AdView获得一个固定的大小,而不需要任何代码。

AdView现在是最后一个类了
    <packagename.MyAdView
        android:id="@id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="unitId"
        ads:loadAdOnCreate="true"
        ads:testDevices="deviceId"
        android:visibility="visible" >
    </packagename.MyAdView>