Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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
如何将AdMob放在Android操作栏屏幕顶部(上方)?_Android_Android Layout_Android Actionbar_Admob - Fatal编程技术网

如何将AdMob放在Android操作栏屏幕顶部(上方)?

如何将AdMob放在Android操作栏屏幕顶部(上方)?,android,android-layout,android-actionbar,admob,Android,Android Layout,Android Actionbar,Admob,我试图在屏幕顶部(Android操作栏上方)放置AdMob广告。 黄色=动作条 红色=内容 绿色=AdMob 我发现的一个方法是在屏幕底部放置一个广告,并显示Actionbar。但到目前为止,我还不知道如何把它放在屏幕的顶部 我这样试过: private AdView adView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

我试图在屏幕顶部(Android操作栏上方)放置AdMob广告。

  • 黄色=动作条
  • 红色=内容
  • 绿色=AdMob
我发现的一个方法是在屏幕底部放置一个广告,并显示Actionbar。但到目前为止,我还不知道如何把它放在屏幕的顶部

我这样试过:

private AdView adView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // main view setup
    setContentView(R.layout.main);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    // actionbar setup
    ActionBar actionBar = getActionBar();
    actionBar.setTitle("Search");
    actionBar.setDisplayHomeAsUpEnabled(true);

    final LinearLayout content = (LinearLayout) findViewById(android.R.id.content).getParent();

    // Create the adView
    adView = new AdView(this, AdSize.BANNER, "ID");

    // Lookup your LinearLayout assuming it’s been given
    // the attribute android:id="@+id/mainLayout"

    // Add the adView to it
    FrameLayout.LayoutParams parm = (FrameLayout.LayoutParams) content.getLayoutParams();
    parm.gravity = Gravity.TOP;
    content.addView(adView);

    // Initiate a generic request to load it with an ad
    AdRequest adRequest = new AdRequest();
    adRequest.addTestDevice("TEST_DEVICE_ID");
    adView.loadAd(adRequest);
}
下面您可以看到我的应用程序的层次结构查看器的一部分。视图“id/main”是我的主要布局。 如图所示,ActionBar有一个名为“id/action\u bar\u container”的id。在上面的代码中,我设法访问了FrameLayout“content”,但无法访问action\u bar\u容器视图。因为它们位于同一层次结构级别(我认为),所以应该可以以某种方式访问ActionBar视图

但它不起作用:

任何关于如何实现这一点的想法,或是它如何工作的链接,或是它不工作的官方声明。

import android.os.Bundle;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;

public class MainActivity extends SherlockActivity {
private ActionBar bar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_Sherlock);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bar = getSupportActionBar();
    LayoutInflater inflater =       (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View customView = (View)inflater.inflate(R.layout.custom_view, null); //<-- put your ad instead of this
    bar.setDisplayOptions(
            ActionBar.DISPLAY_SHOW_CUSTOM,
            ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME
                    | ActionBar.DISPLAY_SHOW_TITLE);
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setCustomView(customView, new ActionBar.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));
}

 @Override
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
        getSupportMenuInflater().inflate(R.menu.test_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }
 }
导入android.view.LayoutInflater; 导入android.view.view; 导入android.view.ViewGroup; 导入com.actionbarsherlock.app.ActionBar; 导入com.actionbarsherlock.app.SherlockActivity; 公共类MainActivity扩展了SherlockActivity{ 私人行动吧; @凌驾 创建时受保护的void(Bundle savedInstanceState){ setTheme(R.style.Theme_Sherlock); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bar=getSupportActionBar(); LayoutFlater充气器=(LayoutFlater)getSystemService(Context.LAYOUT\u充气器\u服务);
View customView=(View)充气器。充气(R.layout.custom_View,null);//据我所知,一旦您选择使用ActionBar,它将被添加到(UI层次结构)比布局更高的级别

这意味着你无法控制它的位置,以及它上面的位置

布局从操作栏下方开始,在屏幕底部结束


在我看来,如果你真的找到了一种方法来做你想做的事情,它将是非常不完整的。

你说你有内容框架布局参考。你能得到它的父视图吗?将它转换为LinearLayout,然后在第一个位置添加你的视图


您可以在任何视图上使用
getRootView()
,或者
getWindow().getDecorView()
来获取
PhoneDecorView
。它有一个子项-垂直
线性布局

将布局作为第一个子项添加到其中

请注意,这是一个糟糕的想法。从用户体验的角度来看,这是对所有设计准则的可怕打击。出于多种设计原因,操作栏必须位于顶部

其次,这可能会在OEM主题的设备上打破

第三,关于平板电脑在景观中的应用,你真的会在顶部有这么大的一个酒吧吗


总之,是的,这是可能的,但这是一个可怕的想法。不要这样做。

这似乎不值得赏金,但前面的一个问题回答了这个问题:

诀窍是从使用谷歌actionbar切换到actionbarsherlock库。这对你的应用来说可能是个好主意,因为它允许你在旧版本的android上支持actionbar


用户声称已经实现了这一点。

在横向模式下,你不能在操作栏上方放置任何东西,我花了数周的时间来尝试,直到我最终放弃,并将我自己的操作栏放在顶部,如果你是纵向的-这将帮助你感谢答案。似乎你的解决方案只有在启用导航模式选项卡的情况下才有效?所以你没有“找不到任何其他解决方案,创建了自己的标题栏,根本没有使用actionbar?是的,我使用了TabIndicator,这类似于带有viewpager的普通listview,很容易实现,但它看起来与actionbar不完全一样。”does@viperbone您好,您有完整的示例解决方案代码吗?我遇到了一些问题试着这样做是不可能的fragments@Gorets不,对不起,在这种情况下我帮不了你。你知道它如何与内置的Android ActionBar一起工作吗?嗨,多斯,谢谢你的回答。我添加了一张层次视图的图片。不过我认为应该可以这样做。小心!这适用于我的Galaxy S3 mini,但在我的Galaxy S4上是com.android.internal.widget.ActionBarOverlayLayout而不是LinearLayout。对我来说,更好的解决方案是在decorView和内容视图之间插入我自己的LinearLayout。