3

我最近更新了我的 android 应用程序以使用 v7 对 android 2.3 上的 actionbar 和 actionbar 选项卡的支持。更新代码后,我在 4.2 设备和模拟的 2.3 设备上运行了该应用程序。操作栏和选项卡在真实硬件上显示良好,但在模拟设备上却没有。仅显示第一个片段,并且视图的左侧和顶部被剪裁。这是我的主要操作栏活动。

  package com.rmsanger.minneapolishiltongargeninn;

  import android.support.v4.app.Fragment;
  import android.support.v4.app.FragmentTransaction;
  import android.os.Bundle;
  import android.support.v7.app.ActionBar;
  import android.support.v7.app.ActionBar.Tab;
  import android.support.v7.app.ActionBarActivity;

  public class MainActivity extends ActionBarActivity {



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

    android.support.v7.app.ActionBar actionBar = getSupportActionBar();


    //actionBar.setDisplayShowTitleEnabled(false);

    Tab tab = actionBar.newTab();   


    String label2 = getResources().getString(R.string.informationtab_label);
    tab = actionBar.newTab();
    tab.setText(label2);
    TabListener<InformationFragment> tl2 = new TabListener<InformationFragment>(this, label2, InformationFragment.class);
    tab.setTabListener(tl2);
    actionBar.addTab(tab);

    String label3 = getResources().getString(R.string.diningtab_label);
    tab = actionBar.newTab();
    tab.setText(label3);
    TabListener<DiningFragment> tl3 = new TabListener<DiningFragment>(this, label3, DiningFragment.class);
    tab.setTabListener(tl3);
    actionBar.addTab(tab);

    String label6 = getResources().getString(R.string.localattractionstab_label);
    tab = actionBar.newTab();
    tab.setText(label6);
    TabListener<LocalAttractionsFragment> tl6 = new TabListener<LocalAttractionsFragment>(this, label6, LocalAttractionsFragment.class);
    tab.setTabListener(tl6);
    actionBar.addTab(tab);


    String label7 = getResources().getString(R.string.localeventstab_label);
    tab = actionBar.newTab();
    tab.setText(label7);
    TabListener<LocalEventsFragment> tl7 = new TabListener<LocalEventsFragment>(this, label7, LocalEventsFragment.class);
    tab.setTabListener(tl7);
    actionBar.addTab(tab);

    String label5 = getResources().getString(R.string.faqtab_label);
    tab = actionBar.newTab();
    tab.setText(label5);
    TabListener<FAQFragment> tl5 = new TabListener<FAQFragment>(this, label5, FAQFragment.class);
    tab.setTabListener(tl5);
    actionBar.addTab(tab);

    String label8 = getResources().getString(R.string.dealstab_label);
    tab = actionBar.newTab();
    tab.setText(label8);
    TabListener<DealsFragment> tl8 = new TabListener<DealsFragment>(this, label8, DealsFragment.class);
    tab.setTabListener(tl8);
    actionBar.addTab(tab);

    String label4 = getResources().getString(R.string.socialmediatab_label);
    tab = actionBar.newTab();
    tab.setText(label4);
    TabListener<SocialMediaFragment> tl4 = new TabListener<SocialMediaFragment>(this, label4, SocialMediaFragment.class);
    tab.setTabListener(tl4);
    actionBar.addTab(tab);


    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.show();

    if (savedInstanceState != null) {
        actionBar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
    }   

}


@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("tab", getSupportActionBar().getSelectedNavigationIndex());
}   

private class TabListener<T extends Fragment> implements
    ActionBar.TabListener {
    private Fragment mFragment;
    private final ActionBarActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    /**
     * Constructor used each time a new tab is created.
     * 
     * @param activity
     *            The host Activity, used to instantiate the fragment
     * @param tag
     *            The identifier tag for the fragment
     * @param clz
     *            The fragment's Class, used to instantiate the fragment
     */
    public TabListener(ActionBarActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {

        mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
        // Check if the fragment is already initialized
        if (mFragment == null) {
            // If not, instantiate and add it to the activity
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            // If it exists, simply attach it in order to show it
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(mFragment);
        }
    }

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


  }

*更新我替换

     ft.add(android.R.id.content, mFragment, mTag);

     ft.add(R.id.fragView, mFragment, mTag);

其中 fragView 只是一个相对布局,现在显示选项卡。然而,视图仍被裁剪在顶部和左侧。

4

1 回答 1

3

更新为使用此处描述的方法并解决了布局问题。

带有支持库和 Fragments 覆盖内容的 ActionBar

于 2013-08-02T15:28:35.800 回答