5

我试图在 Android 操作栏的屏幕顶部(上方)放置一个 AdMob 广告。 上面的ActionBar 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_bar_container”的 id。在我上面的代码中,我设法访问了 FrameLayout “内容”,但我无法访问 action_bar_container 视图。因为它们处于同一层次结构级别(我认为),所以应该可以以某种方式访问​​该 ActionBar 视图。

在此处输入图像描述

但它没有用:

不显示 ActionBar

任何想法如何实现或链接如何工作或官方声明它不起作用。

4

5 回答 5

6

您可以getRootView()在任何视图上使用或getWindow().getDecorView()获取PhoneDecorView. 它有一个孩子——一个垂直的LinearLayout

将您的布​​局添加为第一个孩子。

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

其次,这可能会在以 OEM 为主题的设备上中断。

第三,横屏的平板怎么样,顶部真的会有这么大的吧台吗?

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

于 2013-07-08T15:38:53.690 回答
0

这似乎不值得赏金,但之前的一个问题回答了这个问题: Getting admob above actionbarsherlock

诀窍是从使用 google actionbar 切换到 actionbarsherlock 库。无论如何,这对您的应用程序来说可能是一个好主意,因为它允许您支持旧版本的 android 上的操作栏。

用户声称已经让它工作了。

于 2013-07-08T17:11:23.767 回答
0

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

http://developer.android.com/reference/android/view/View.html#getParent%28%29

于 2013-07-04T18:46:40.050 回答
0
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);
    }
 }
于 2013-06-23T11:43:07.400 回答
0

据我所知,一旦您选择使用 ActionBar,它就会被添加到比您的布局更高的级别(UI 层次结构)。

这意味着您无法控制它的放置位置以及放置在其上方的内容。

您的布局从操作栏下方开始,到屏幕底部结束。

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

于 2013-07-04T08:33:42.873 回答