Як розмістити AdMob у верхній частині екрана (див. Вище) Android Actionbar?

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

  • жовтий = ActionBar
  • червоний = вміст
  • зелений = 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". У наведеному вище коді мені вдалося отримати доступ до "контенту" FrameLayout, але мені не вдалося отримати доступ до вигляду action_bar_container. Оскільки вони знаходяться на тому ж рівні ієрархії (я думаю), слід якось отримати доступ до цієї панелі дій.

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, джерело
Дякую за відповідь. Здається, що ваше рішення працює, лише якщо увімкнено TABS NavigationMode? Таким чином, ви не знайшли жодного іншого рішення та створили власний рядок заголовка і не використовували взагалі панель дій?
додано Автор Bruno Bieri, джерело
Дякую за відповідь. Здається, що ваше рішення працює, лише якщо увімкнено TABS NavigationMode? Таким чином, ви не знайшли жодного іншого рішення та створили власний рядок заголовка і не використовували взагалі панель дій?
додано Автор Bruno Bieri, джерело
@ Горець Ні, вибач, я не можу вам допомогти у цьому випадку.
додано Автор Bruno Bieri, джерело

9 Відповіді

Ви можете використовувати getRootView() на будь-якому представленні або getWindow (). GetDecorView() , щоб отримати PhoneDecorView . Вона має одну дитину - вертикальний LinearLayout .

Додати макет там як перша дитина.

Зауважте, що це погана, погана ідея. З точки зору досвіду користувачів, це страшне враження від усіх правил дизайну. Діюча смуга повинна бути у верхній частині для багатьох причин дизайну.

По-друге, це може зламатися на пристроях, орієнтованих на OEM.

По-третє, як щодо таблеток в ландшафтному режимі, чи справді у вас буде такий величезний бар на вершині?

На закінчення, так, це можливо, але це жахлива ідея. Не робіть цього.

6
додано
Будь обережний! Це правильно для моєї Galaxy S3 mini, але на моїй Galaxy S4 була com.android.internal.widget.ActionBarOverlayLayout замість LinearLayout. Кращим рішенням для мене було вставити мою власну LinearLayout між декоративним представленням та переглядом вмісту.
додано Автор Vladyslav Savchenko, джерело

Ви можете використовувати getRootView() на будь-якому представленні або getWindow (). GetDecorView() , щоб отримати PhoneDecorView . Вона має одну дитину - вертикальний LinearLayout .

Додати макет там як перша дитина.

Зауважте, що це погана, погана ідея. З точки зору досвіду користувачів, це страшне враження від усіх правил дизайну. Діюча смуга повинна бути у верхній частині для багатьох причин дизайну.

По-друге, це може зламатися на пристроях, орієнтованих на OEM.

По-третє, як щодо таблеток в ландшафтному режимі, чи справді у вас буде такий величезний бар на вершині?

На закінчення, так, це можливо, але це жахлива ідея. Не робіть цього.

6
додано
Будь обережний! Це правильно для моєї Galaxy S3 mini, але на моїй Galaxy S4 була com.android.internal.widget.ActionBarOverlayLayout замість LinearLayout. Кращим рішенням для мене було вставити мою власну LinearLayout між декоративним представленням та переглядом вмісту.
додано Автор 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, він буде доданий на більш високому рівні (ієрархії інтерфейсу користувача), ніж ваш макет.

Це означає, що ви не маєте контролю над місцем розташування та розташуванням над ним.

Ваш макет починається під панеллю дій і закінчується внизу екрана.

На мій погляд, якщо ви знайдете спосіб зробити те, що ви хочете, це буде дуже незграбним.

0
додано
Привіт дор, дякую за вашу відповідь. Я додав фотографію вигляду ієрархії. Все-таки я думаю, що це повинно бути можливо.
додано Автор Bruno Bieri, джерело

Наскільки я знаю, коли ви вирішите працювати з ActionBar, він буде доданий на більш високому рівні (ієрархії інтерфейсу користувача), ніж ваш макет.

Це означає, що ви не маєте контролю над місцем розташування та розташуванням над ним.

Ваш макет починається під панеллю дій і закінчується внизу екрана.

На мій погляд, якщо ви знайдете спосіб зробити те, що ви хочете, це буде дуже незграбним.

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 до бібліотеки actionbarsherlock. У будь-якому випадку це, мабуть, хороша ідея вашого додатка, оскільки вона дозволяє підтримувати панель дій на старіших версіях Android.

Користувач стверджує, що він отримав цю роботу.

0
додано

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

Хитрість полягає у переході від використання панелі дій Google до бібліотеки actionbarsherlock. У будь-якому випадку це, мабуть, хороша ідея вашого додатка, оскільки вона дозволяє підтримувати панель дій на старіших версіях Android.

Користувач стверджує, що він отримав цю роботу.

0
додано
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.