Вопрос по admob, android-actionbar, android – Панель действий с вкладками «Фрагмент» и AdMob

2

У меня есть приложение, которое использует ActionBar с вкладками в сочетании с фрагментами. Теперь я хотел бы разделить экран на обычный экран вверху и небольшую полосу внизу для рекламы: enter image description here
Слева - обычный экран, вкладки и их фрагменты занимают весь экран. То, что я хочу, это ситуация справа. Вкладки и фрагменты занимают красную часть, зеленая часть предназначена для рекламы. Поэтому в красной части должно быть место для рекламы. Я не хочу накладывать рекламу.

Поскольку действие, которое настраивает панель действий и вкладки, не имеет макета, я не могу добавить AdView.

Как я могу это сделать?

Edit
Вот как я реализовал свое приложение. Панель действий с вкладками позволяет отображать фрагменты, поэтому в основном действии не используется файл макета xml.

Мой код: TestActivity.java

public class TestActivity extends SherlockFragmentActivity {
    private ActionBar actionBar;

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

        initAds();
    }

    private void setupTabs(Bundle savedInstanceState) {
        actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        addTab1();
        addTab2();
    }

    private void addTab1() {
        Tab tab1 = actionBar.newTab();
        tab1.setTag("1");
        String tabText = "1";
        tab1.setText(tabText);
        tab1.setTabListener(new TabListener<MyFragment>(TestActivity.this, "1", MyFragment.class));

        actionBar.addTab(tab1);
    }

    private void addTab2() {
        Tab tab1 = actionBar.newTab();
        tab1.setTag("2");
        String tabText = "2";
        tab1.setText(tabText);
        tab1.setTabListener(new TabListener<MyFragment>(TestActivity.this, "2", MyFragment.class));

        actionBar.addTab(tab1);
    }

    private void initAds(){
        //Here I want to display the ad, only loading once, Just like Davek804 said
    }
}

TabListener.java

public class TabListener<T extends SherlockFragment> implements com.actionbarsherlock.app.ActionBar.TabListener {
    private final SherlockFragmentActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    /* The following are each of the ActionBar.TabListener callbacks */

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        SherlockFragment preInitializedFragment = (SherlockFragment) mActivity.getSupportFragmentManager().findFragmentByTag(mTag);

        // Check if the fragment is already initialized
        if (preInitializedFragment == null) {
            // If not, instantiate and add it to the activity
            SherlockFragment mFragment = (SherlockFragment) SherlockFragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            ft.attach(preInitializedFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        SherlockFragment preInitializedFragment = (SherlockFragment) mActivity.getSupportFragmentManager().findFragmentByTag(mTag);

        if (preInitializedFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(preInitializedFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // User selected the already selected tab. Usually do nothing.
    }
}

MyFragment.java

public class MyFragment extends SherlockFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.myfragment, container, false);
    }

}
Davek804 Точно. nhaarman
То есть вы хотите, чтобы AdView был виден независимо от того, на какой вкладке находится пользователь? В принципе, и это неверно, но что вы хотите, чтобы adView был по сути всем основным макетом, но чтобы он занимал только нижнюю часть? Так как пользователь переключает вкладки, красный меняется, но зеленый остается постоянным (НЕ новая версия зеленого цвета на каждой вкладке)? Davek804

Ваш Ответ

2   ответа
1
4

Создайте файл XML, содержащий определение и использование AdView<include> чтобы включить его в нижней части каждого из ваших фрагментов.

Или создайте макет и свои вкладки к нему. Ср ссылка DOS:

To get started, your layout must include a ViewGroup in which you place each Fragment associated with a tab. Be sure the ViewGroup has a resource ID so you can reference it from your tab-swapping code. Alternatively, if the tab content will fill the activity layout (excluding the action bar), then your activity doesn't need a layout at all (you don't even need to call setContentView()). Instead, you can place each fragment in the default root ViewGroup, which you can refer to with the android.R.id.content ID (you can see this ID used in the sample code below, during fragment transactions).

Я думал, что это было ясно. Во всяком случае, это работает, спасибо! nhaarman
Вы можете сказать так в вопросе. Затем просто создайте RelativeLayout и закрепите AdView снизу. Затем добавьте свои фрагменты, чтобы неandroid.R.id.content, но для контейнера в вашем макете (FrameLayout будет делать). Ср ссылка:developer.android.com/guide/topics/ui/actionbar.html#Tabs
Это может привести к перезагрузке объявления при переключении между вкладками, а это не то, что я хочу. nhaarman

Похожие вопросы