2

出于某种原因,当我更改设备的方向时,操作栏未正确重建,并且选项卡(有时显示为微调器)与其他菜单项重叠。

我有 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();
}

在清单中(以防万一你问,我有这个工作正常):

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

1)我当然需要清理重叠的部分。

2)如果你能帮助我禁用微调器,那就更好了。我只想要标签,即使我必须在两个方向上都使用图像。

4

1 回答 1

3

ActionBarSherlock 是一个兼容层,存在于活动的内容视图中。这与存在于窗口内但在正常内容视图之外的本机操作栏有点不同。

由于这个事实,当您在清单中声明您处理方向更改时,它无法正确地重新创建自己。如果您阻止 ABS 重新创建操作栏视图,则几乎总是会出现像您所描绘的那样明显的伪影。

TL;DR: ActionBarSherlock 不适用于configChanges="orientation".

于 2013-07-04T02:43:31.433 回答