Вкладка Actionbar и заголовок приложения в той же самой линии

Я создал приложение, имеющее строку меню и два счета в ней. Счета и название заявления находятся в той же самой линии, как дали в снимке экрана. Я хочу, чтобы счета были в линии ниже названия и имеющий равный вес. Пожалуйста, взгляните на код ниже и выручите меня. Спасибо.

package com.example.myproj;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.ActionBar.Tab;
import android.content.Context;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity1 extends Activity {
    public static Context appContext;
    static ArrayList myarray = new ArrayList();
    static ArrayList myarray1;
    static ArrayList myarray2 = new ArrayList();
    static ArrayList myarray21;
    static int check1 = 0;
    static int check2 = 0;
    static int stcount = 0;
    static int csicount = 0;
    static ActionBar.Tab PlayerTab;
    static ActionBar.Tab StationsTab;

    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        appContext = getApplicationContext();

        ActionBar actionbar = getActionBar();
        actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        PlayerTab = actionbar.newTab().setText("ST");
        StationsTab = actionbar.newTab().setText("CSI");
       //settab1("Testing");
        Fragment PlayerFragment = new AFragment();
        Fragment StationsFragment = new BFragment();

        PlayerTab.setTabListener(new MyTabsListener(PlayerFragment));
        StationsTab.setTabListener(new MyTabsListener(StationsFragment));

        actionbar.addTab(PlayerTab);
        actionbar.addTab(StationsTab);

    }

    public static void settab1(String text) {
        PlayerTab.setText(text);
    }

    public static void settab2(String text) {
        StationsTab.setText(text);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       //Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

class MyTabsListener implements ActionBar.TabListener {
    public Fragment fragment;

    public MyTabsListener(Fragment fragment) {
        this.fragment = fragment;
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        Toast.makeText(MainActivity1.appContext, "Reselected!",
                Toast.LENGTH_LONG).show();
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        ft.replace(R.id.fragment_container, fragment);
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft.remove(fragment);
    }

}

enter image description here

2
nl ja de

4 ответы

У меня была удача при использовании следующего отражения 'хакерское проникновение':

private void forceStackedTabs() {
    ActionBar ab = getSupportActionBar();
    if ( ab instanceof ActionBarImpl ) {
       //Pre-ICS
        disableEmbeddedTabs( ab );
    } else if ( ab instanceof ActionBarWrapper ) {
       //ICS
        try {
            Field abField = ab.getClass().getDeclaredField( "mActionBar" );
            abField.setAccessible( true );
            disableEmbeddedTabs( abField.get( ab ) );
        } catch (NoSuchFieldException e) {
            Log.e( TAG, "Error disabling actionbar embedded", e );
        } catch (IllegalArgumentException e) {
            Log.e( TAG, "Error disabling actionbar embedded", e );
        } catch (IllegalAccessException e) {
            Log.e( TAG, "Error disabling actionbar embedded", e );
        }
    }
}
private void disableEmbeddedTabs(Object ab) {
    try {
        Method setHasEmbeddedTabsMethod = ab.getClass().getDeclaredMethod("setHasEmbeddedTabs", boolean.class);
        setHasEmbeddedTabsMethod.setAccessible(true);
        setHasEmbeddedTabsMethod.invoke(ab, false);
    } catch (Exception e) {
        Log.e( TAG, "Error disabling actionbar embedded", e );
    }
}

Please note that I didn't think of this myself, but simply rewrote the code given in this answer: replicate ActionBar Tab(s) with custom view

6
добавлено
Я использую appCompat. Я не могу импортировать ActionBarImpl и ActionBarWrapper.
добавлено автор Tooto, источник

Это - поведение родной строки меню.

Одна только строка меню решает, поместить ли счета на второй ряд, и мы не можем влиять на это. (Обычно в таблетке счета действующие, в телефонах ниже),

Если вы хотите гарантировать, что ваши счета всегда - счета, и всегда ниже строки меню, удаляют счета из строки меню и переключаются на использование ViewPager для вашего содержания с любым PagerTabStrip (от пакета Поддержки Android, куда ViewPager происходит из), или индикатор счета из проекта ViewPagerIndicator для самих счетов. Как дополнительная льгота, ваше содержание теперь горизонтально способно сильным ударом перемещаться между счетами, который является популярным подходом.

Just a note. It is not a right pattern. http://developer.android.com/design/patterns/pure-android.html

0
добавлено

В ActionBarImpl.java, в setHasEmbeddedTabs (булев hasEmbeddedTabs) метод, измените стоимость:

mHasEmbeddedTabs = hasEmbeddedTabs;

к:

mHasEmbeddedTabs = false;
0
добавлено

Вот демонстрационный пример, который может быть помощью вы! Я использую customview в actionbar, который является, содержит TabHost, Он может удаться хорошо как картина выше, но я не проверяю его в различных размерах экрана.

https://github.com/shellshy/actionbar

0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)