Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/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
Java AdMob横幅在Android中定位在屏幕底部,不使用xml相对布局_Java_Android_Admob_Positioning - Fatal编程技术网

Java AdMob横幅在Android中定位在屏幕底部,不使用xml相对布局

Java AdMob横幅在Android中定位在屏幕底部,不使用xml相对布局,java,android,admob,positioning,Java,Android,Admob,Positioning,下面的代码将AdMob横幅放置在视图底部。但问题是我使用了LinearLayout并将横幅向上移动了75像素。这是不好的,因为横幅高度通常为50px,但将其向上移动50px后,它仅显示横幅的一部分。另一个问题是横幅高度不固定 DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int screenWidth

下面的代码将AdMob横幅放置在视图底部。但问题是我使用了
LinearLayout
并将横幅向上移动了75像素。这是不好的,因为横幅高度通常为50px,但将其向上移动50px后,它仅显示横幅的一部分。另一个问题是横幅高度不固定

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenWidth = displaymetrics.widthPixels;
int screenHeight = displaymetrics.heightPixels;
LinearLayout.LayoutParams adParams = new LinearLayout.LayoutParams(screenWidth, 2 * screenHeight - 75);


 // Create an ad.
adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId(AD_UNIT_ID);

// Create an ad request. Check logcat output for the hashed device ID to
// get test ads on a physical device.
AdRequest adRequest = new AdRequest.Builder()
    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
    .addTestDevice("INSERT_YOUR_HASHED_DEVICE_ID_HERE")
    .build();

// Start loading the ad in the background.
adView.loadAd(adRequest);

// Adding full screen container
addContentView(adView, adParams);
我尝试使用
RelativeLayout
而不是
LinearLayout
如下:

RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT);


lay.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

..................
......................
addContentView(adView, lay);

但这会在屏幕顶部显示横幅。我如何才能将其置于底部?

从Android文档中,
RelativeLayout.ALIGN_PARENT_bottom
是一条“将孩子的底边与其RelativeLayout父母的底边对齐的规则”,因此广告横幅将放置在RelativeLayout的底部,而不一定是屏幕的底部。要确保横幅位于屏幕底部,您需要扩展RelativeLayout以填充屏幕,您可以通过将
RelativeLayout.LayoutParams.WRAP_内容
更改为
RelativeLayout.LayoutParams.MATCH\u PARENT
来完成此操作

编辑:这只会使横幅显示在RelativeLayout父级的底部,因此请确保RelativeLayout的底边位于屏幕底部

至于使用LinearLayout,我建议使用RelativeLayout,因为它更通用,可以容纳LinearLayout,并且可能是解决此特定问题的最简单(如果不是唯一)的方法


为了解决您对可变横幅高度的担忧,您将其设置为以密度无关像素(dp)为单位的高度,因此它只会在设备之间变化,而不会在同一设备(或模拟器)上多次启动应用程序之间变化。请参阅以了解所有广告大小及其说明。

如果您希望广告视图位于屏幕底部,则可以通过一种简单的方式将要显示的内容包装成线性布局,并将其标记为
android:Layout_weight=“1”
。这将确保它占用除AdView所占用的空间之外的所有空间

<!-- In your layout xml -->

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
>

    <!-- NB make layout_weight=1 -->
    <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
    >

    .. your content goes here.

    </LinearLayout>

    <LinearLayout 
            android:id="@+id/adViewContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
    >

</LinearLayout>
其中,在我的例子中,
mFrameLayout
在cocos2d-x
Cocos2dxActivity
类中定义,定义如下:

    // FrameLayout
    ViewGroup.LayoutParams framelayout_params =
        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                   ViewGroup.LayoutParams.MATCH_PARENT);
    mFrameLayout = new FrameLayout(this);
    mFrameLayout.setLayoutParams(framelayout_params);

将两个
RelativeLayout.LayoutParams.WRAP_CONTENT
更改为
RelativeLayout.LayoutParams.MATCH_PARENT
会导致横幅显示在屏幕中央。您能进一步帮助吗?请参阅编辑。如果您的应用程序中现在除了RelativeLayout和广告横幅之外还有其他视图,请确保它们位于RelativeLayout和广告横幅之上。如果您仍然无法让它工作,请发布设置广告的整个方法(可能是onCreate())。我的项目没有任何布局xml文件。这是一个cocos2d-X3项目。我应该如何创建它?我已经在
res
中创建了
layout
目录,并在该目录中添加了
layouts.xml
文件,其中包含所提到的内容。在屏幕顶部出现的横幅中也使用了您的代码。顺便说一句,我的应用程序处于纵向模式。谢谢你的帮助,威廉,但我找到了无xml方式。请看我的答案。
AdRequest adRequest = new AdRequest.Builder()
  .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
  .build();

RelativeLayout relativeLayout = new RelativeLayout(this);
mFrameLayout.addView(relativeLayout);


RelativeLayout.LayoutParams adViewParams = new RelativeLayout.LayoutParams(
   AdView.LayoutParams.WRAP_CONTENT,
   AdView.LayoutParams.WRAP_CONTENT);
 // align bottom
adViewParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
 // align center
adViewParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);


relativeLayout.addView(adView, adViewParams);


adView.loadAd(adRequest);
adView.setBackgroundColor(Color.BLACK);
adView.setBackgroundColor(0);
    // FrameLayout
    ViewGroup.LayoutParams framelayout_params =
        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                   ViewGroup.LayoutParams.MATCH_PARENT);
    mFrameLayout = new FrameLayout(this);
    mFrameLayout.setLayoutParams(framelayout_params);