在Android中使用Sherlock Fragment的操作栏选项卡的自定义背景

时间:2013-11-13 14:07:39

标签: android android-fragments android-actionbar actionbarsherlock android-tabs

我已经使用Sherlock Fragment创建了一个类来启用ViewPager的滑动视图。现在我正在尝试使用setBackgroundResource()方法更改tabspec中可能的选项卡背景,但它不起作用。我想为每个标签添加自定义背景,同时对焦/选择/未选中。

我尝试使用选择器,但它没有用

<item android:drawable="@drawable/selected" android:state_selected="true"/>
<item android:drawable="@drawable/not_selected" android:state_selected="false"/>

mActionBar.setStackedBackgroundDrawable(getResources().getDrawable(
                R.drawable.tab_indicator)); 

这是我的主要课程

public class MainActivity extends SherlockFragmentActivity {

    // Declare Variables
    ActionBar mActionBar;
    ViewPager mPager;
    Tab tab;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from activity_main.xml
        setContentView(R.layout.activity_main);

        // Activate Navigation Mode Tabs
        mActionBar = getSupportActionBar();
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        // Locate ViewPager in activity_main.xml
        mPager = (ViewPager) findViewById(R.id.pager);

        // Activate Fragment Manager
        FragmentManager fm = getSupportFragmentManager();

        // Capture ViewPager page swipes
        ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                // Find the ViewPager Position
                mActionBar.setSelectedNavigationItem(position);
            }
        };

        mPager.setOnPageChangeListener(ViewPagerListener);
        // Locate the adapter class called ViewPagerAdapter.java
        ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm);
        // Set the View Pager Adapter into ViewPager
        mPager.setAdapter(viewpageradapter);

        // Capture tab button clicks
        ActionBar.TabListener tabListener = new ActionBar.TabListener() {

            @Override
            public void onTabSelected(Tab tab, FragmentTransaction ft) {
                // Pass the position on tab click to ViewPager
                mPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTabReselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
            }
        };

        // Create first Tab
        tab = mActionBar.newTab().setText("Tab1").setTabListener(tabListener);
        mActionBar.addTab(tab);

        // Create second Tab
        tab = mActionBar.newTab().setText("Tab2").setTabListener(tabListener);
        mActionBar.addTab(tab);

        // Create third Tab
        tab = mActionBar.newTab().setText("Tab3").setTabListener(tabListener);
        mActionBar.addTab(tab);

    }

}

1 个答案:

答案 0 :(得分:2)

这是基于我刚刚做过的事情(和我一样,这是多么痛苦)。 我还没有尝试过编译,但希望它有所帮助。祝你好运!

在主要活动的onCreate方法中,将addTab语句替换为:

    ActionBar.Tab tab1 = mActionBar.newTab().setTabListener(tabListener);
    //Create a temporary RelativeLayout and inflate it with your custom layout
    RelativeLayout rl1 = (RelativeLayout) getLayoutInflater().inflate(R.layout.tabLayout, null);

    //Set the title of the tab
    TextView t1 =  (TextView) rl1.findViewById(R.id.tab1_text);
    t1.setText("Tab1 Title");
    t1.setMinimumWidth(150);//Prevents the tabs from becoming too small on larger screens, Change as needed

    //Set the background of the tab to the layout you just created
    tab1.setCustomView(rl1);
    //Add the tab to your ActionBar
    mActionBar.addTab(tab1);

tab1Layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="0dp"
android:background="@drawable/yourDrawable"
android:layout_margin="0dp">

<TextView
    android:id="@+id/tab1_text"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    style="@style/yourStyleIfYouWantToUseOne"
    android:layout_centerInParent="true"
    android:layout_centerHorizontal="true"
    android:gravity="center|center_horizontal"
    android:textStyle="bold"/>
</RelativeLayout>

基本上,我们正在创造一个&#34;假的&#34;选项卡只需将TextView放在布局中并添加背景。

作为补充说明,您的drawable需要包含选定和未选定drawable的选择器。如果您需要一个示例,请查看Android Asset Studio生成的内容,这是我用来制作标签的内容。

根据需要为多个标签重复此操作。

如果这部分内容含糊不清或令人困惑,请随时提问。 ;)