Разделите на лентата за действие се припокриват при завъртане на екрана

По някаква причина, когато променя ориентацията на устройството, лентата с действия не се възстановява правилно и разделите (понякога показани като въртящ се бутон) се припокриват с другите елементи от менюто.

Имам 4 раздела (работи добре до 3) (използвам Actionbarsherlock, ако е приложимо) В портретна ориентация използвам изображения вместо текст за разделите.

Ето екранна снимка за обяснение:

въведете описание на изображението тук

И ето кода, който използвам:

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

    setContentView(R.layout.activity_main);

    // Set up the action bar.
    actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setEnabled(false);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setOffscreenPageLimit(3);

    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }
    }); 

    RebuildActionBar();
}

public void RebuildActionBar(){
    if(actionBar.getTabCount()>0) actionBar.removeAllTabs();
    // For each of the sections in the app, add a tab to the action bar.
    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
        if(screen_width>screen_height){
            actionBar.addTab(actionBar.newTab()
                .setText(mSectionsPagerAdapter.getPageTitle(i))
                .setTabListener(this));
        } else {
            actionBar.addTab(actionBar.newTab()
                    .setIcon(mSectionsPagerAdapter.getPageIcon(i))
                    .setTabListener(this));
        }
    }
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    RebuildActionBar();
}

В Manifest (само в случай, че попитате, имам това, което работи добре):

<activity
    ...
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
/>

1) Трябва, разбира се, да почистя припокриването.

И 2) Ако случайно можете да ми помогнете да деактивирам спинера, още по-добре. Искам само раздели, дори ако трябва да използвам изображения и в двете ориентации.


person Dandy    schedule 04.07.2013    source източник


Отговори (1)


ActionBarSherlock е слой за съвместимост, който съществува в изгледа на съдържанието на дадена дейност. Това е малко по-различно от родната лента за действие, която съществува в прозореца, но извън нормалния изглед на съдържание.

Поради този факт той не може да се пресъздаде правилно, когато декларирате в манифеста, че обработвате промени в ориентацията. Ако попречите на ABS да пресъздаде изгледите на лентата с действия, почти винаги има забележими артефакти като това, което си представяте.

TL;DR: ActionBarSherlock не работи с configChanges="orientation".

person Jake Wharton    schedule 04.07.2013
comment
Благодаря ти Джейк. Сега си спомням това. Би било чудесно, ако можете да намерите начин да работите с configChanges (rebuildTabs подход). Ти си човекът! - person Dandy; 04.07.2013