AdMobを画面の上部に配置する方法(上記)Androidのアクションバーですか?

I trying to place an AdMob ad at the top of the screen (above) the Android Actionbar. ActionBar AdMob above

  • 黄色= ActionBar
  • red =コンテンツ
  • 緑= AdMob

似たような質問は、画面の下部に広告を配置することですアクションバーが表示されます。しかし、これまでのところ私はスクリーンの上にそれを置く方法を理解できませんでした。

私はこの方法で試しました:

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ビューにアクセスすることが可能でなければなりません。

enter image description here

しかし、それは動作しませんでした:

Without ActionBar displayed

どのようにそれを達成するためのアイデアか、それがどのように機能するか、またはそれが機能しないという公式の声明。

5
@viperboneこんにちは、あなたは完全なサンプルソリューションコードを持っていますか?私はいくつかの問題を抱えてこれをやろうとしています
追加された 著者 Gorets,
@viperboneこんにちは、あなたは完全なサンプルソリューションコードを持っていますか?私はいくつかの問題を抱えてこれをやろうとしています
追加された 著者 Gorets,
アクションバーの上に何も置くことはできません。あなたが肖像画になっていれば、私は最終的にあきらめ、一番上に自分のバーを置くまで、何週間もそれを悩ましました。これはあなたを助けます stackoverflow.com/questions/16002217/…
追加された 著者 Lena Bru,
アクションバーの上に何も置くことはできません。あなたが肖像画になっていれば、私は最終的にあきらめ、一番上に自分のバーを置くまで、何週間もそれを悩ましました。これはあなたを助けます stackoverflow.com/questions/16002217/…
追加された 著者 Lena Bru,
はい、私はTabIndicatorを代わりに使用しました。これは、ビューページャーでの通常のリストビューのようなものですが、これは実装が簡単でしたが、アクションバーとまったく同じではありません
追加された 著者 Lena Bru,
はい、私はTabIndicatorを代わりに使用しました。これは、ビューページャーでの通常のリストビューのようなものですが、これは実装が簡単でしたが、アクションバーとまったく同じではありません
追加された 著者 Lena Bru,
答えをありがとう。あなたのソリューションは、NavigationMode TABSを有効にしている場合にのみ機能しますか?だからあなたは他の解決策を見つけられず、独自のタイトルバーを作成し、アクションバーを全く使用しませんでしたか?
追加された 著者 Bruno Bieri,
答えをありがとう。あなたのソリューションは、NavigationMode TABSを有効にしている場合にのみ機能しますか?だからあなたは他の解決策を見つけられず、独自のタイトルバーを作成し、アクションバーを全く使用しませんでしたか?
追加された 著者 Bruno Bieri,
@Goretsいいえ、申し訳ありません、私はその場合にお手伝いできません。
追加された 著者 Bruno Bieri,

9 答え

PhoneDecorView を取得するには、任意のビューまたは getWindow()。getDecorView()getRootView()を使用できます。それは1つの子を持っています - 垂直 LinearLayout

レイアウトを最初の子として追加します。

これは悪い、悪い考えであることに注意してください。ユーザーエクスペリエンスの観点から、これはすべてのデザインガイドラインに対する恐ろしい打撃です。多くの設計上の理由から、最上部にアクションバーが表示されている必要があります

第2に、これはOEMをテーマにしたデバイスで壊れる可能性があります。

第三に、風景の中のタブレットはどうでしょうか、本当にその上にこのような巨大なバーがありますか?

結論として、はい、可能ですが、それは恐ろしい考えです。それをしないでください。

6
追加された
注意してください!それは私のGalaxy S3 miniには当てはまりますが、私のGalaxy S4ではLinearLayoutではなくcom.android.internal.widget.ActionBarOverlayLayoutでした。私のためのよりよい解決策は、自分のLinearLayoutをdecorViewとコンテンツのビューの間に挿入することでした。
追加された 著者 Vladyslav Savchenko,

PhoneDecorView を取得するには、任意のビューまたは getWindow()。getDecorView()getRootView()を使用できます。それは1つの子を持っています - 垂直 LinearLayout

レイアウトを最初の子として追加します。

これは悪い、悪い考えであることに注意してください。ユーザーエクスペリエンスの観点から、これはすべてのデザインガイドラインに対する恐ろしい打撃です。多くの設計上の理由から、最上部にアクションバーが表示されている必要があります

第2に、これはOEMをテーマにしたデバイスで壊れる可能性があります。

第三に、風景の中のタブレットはどうでしょうか、本当にその上にこのような巨大なバーがありますか?

結論として、はい、可能ですが、それは恐ろしい考えです。それをしないでください。

6
追加された
注意してください!それは私のGalaxy S3 miniには当てはまりますが、私のGalaxy S4ではLinearLayoutではなくcom.android.internal.widget.ActionBarOverlayLayoutでした。私のためのよりよい解決策は、自分のLinearLayoutをdecorViewとコンテンツのビューの間に挿入することでした。
追加された 著者 Vladyslav Savchenko,
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);
    }
 }
0
追加された
Android ActionBarを使ってどのように動作するか考えていますか?
追加された 著者 Bruno Bieri,
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);
    }
 }
0
追加された
Android ActionBarを使ってどのように動作するか考えていますか?
追加された 著者 Bruno Bieri,

私が知る限り、ActionBarで作業することを選択すると、レイアウトよりも(UI階層の)上位レベルに追加されます。

つまり、どこに配置されているのか、その上に配置されているのかを制御できません。

あなたのレイアウトはアクションバーの下から始まり、画面の最後で終わります。

私の意見では、あなたが望むことをする方法を見つけたら、それは非常に不毛になるでしょう。

0
追加された
こんにちは、あなたの応答をありがとう。私は階層ビューの画像を追加しました。それでも私はそれが可能でなければならないと思います。
追加された 著者 Bruno Bieri,

私が知る限り、ActionBarで作業することを選択すると、レイアウトよりも(UI階層の)上位レベルに追加されます。

つまり、どこに配置されているのか、その上に配置されているのかを制御できません。

あなたのレイアウトはアクションバーの下から始まり、画面の最後で終わります。

私の意見では、あなたが望むことをする方法を見つけたら、それは非常に不毛になるでしょう。

0
追加された
こんにちは、あなたの応答をありがとう。私は階層ビューの画像を追加しました。それでも私はそれが可能でなければならないと思います。
追加された 著者 Bruno Bieri,

コンテンツフレームレイアウトの参照があるとします。あなたは親のビューを得ることができますか?それをLinearLayoutにキャストし、最初の位置にビューを追加します。

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

0
追加された

This hardly seems worth the bounty, but a previous question answers this: Getting admob above actionbarsherlock

そのトリックは、Googleのアクションバーを使用することから、アクションバーシェルロックライブラリに切り替えることです。とにかくこれはあなたが古いビルドのアンドロイド上でアクションバーをサポートできるようになるので、これはお使いのアプリにとっては良い考えです。

ユーザーはそれを働かせたと主張します。

0
追加された

This hardly seems worth the bounty, but a previous question answers this: Getting admob above actionbarsherlock

そのトリックは、Googleのアクションバーを使用することから、アクションバーシェルロックライブラリに切り替えることです。とにかくこれはあなたが古いビルドのアンドロイド上でアクションバーをサポートできるようになるので、これはお使いのアプリにとっては良い考えです。

ユーザーはそれを働かせたと主張します。

0
追加された