分别为每个操作栏选项卡添加不同的颜色

时间:2014-11-13 06:18:35

标签: android tabs android-actionbar

我需要为每个标签添加不同的颜色。

对于Eg:,如下图所示

enter image description here

MainActivity.java:

// Add New Tab

actionBar.addTab(actionBar.newTab().setText("Home")
        .setTabListener(tabListener));

actionBar.addTab(actionBar.newTab().setText("News")
        .setTabListener(tabListener));
actionBar.addTab(actionBar.newTab().setText("Latest")
        .setTabListener(tabListener));

Home.java:

public class Home extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater
                .inflate(R.layout.fragment_home, container, false);
        ((TextView) v.findViewById(R.id.textView)).setText("Home");


        return v;
    }
}

styles.xml:

<resources>

    <style name="AppBaseTheme" parent="android:Theme.Light">

    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">

    </style>

</resources>

现在我创建了三个标签。现在我需要分别为每个标签添加不同的颜色。我需要一些关于此的建议。谢谢。

2 个答案:

答案 0 :(得分:1)

是的,最后我做到了。

<强> MainActivity.java:

public class MainActivity extends FragmentActivity {
    static ViewPager Tab;
    TabsPagerAdapter TabAdapter;
    ActionBar actionBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TabAdapter = new TabsPagerAdapter(getSupportFragmentManager());

        Tab = (ViewPager) findViewById(R.id.pager);

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

        Tab.setAdapter(TabAdapter);
        actionBar = getActionBar();
        // Enable Tabs on Action Bar
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.TabListener tabListener = new ActionBar.TabListener() {
            @Override
            public void onTabReselected(android.app.ActionBar.Tab tab,
                    FragmentTransaction ft) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
                Tab.setCurrentItem(tab.getPosition());
            }

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

        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

        ActionBar.Tab tab = actionBar.newTab().setText("Home")
                .setTabListener(new TabListener(this, Home.class.getName()));
        View tabView = inflater.inflate(R.layout.fragment_home, null);
        tabView.setBackgroundResource(R.drawable.gradient_shape); // set custom
                                                                    // color

        tab.setCustomView(tabView);
        actionBar.addTab(tab);

        tab = actionBar.newTab().setText("News")
                .setTabListener(new TabListener(this, News.class.getName()));
        View tabView2 = inflater.inflate(R.layout.fragment_news, null);
        tabView2.setBackgroundResource(R.drawable.gradient_shape2); // set
                                                                    // custom
                                                                    // color
        tab.setCustomView(tabView2);
        actionBar.addTab(tab);

        tab = actionBar.newTab().setText("Latest")
                .setTabListener(new TabListener(this, Latest.class.getName()));
        View tabView3 = inflater.inflate(R.layout.fragment_latest, null);
        tabView3.setBackgroundResource(R.drawable.gradient_shape3); // set
                                                                    // custom
                                                                    // color
        tab.setCustomView(tabView3);
        actionBar.addTab(tab);

    }

    public static class TabListener extends Fragment implements
            ActionBar.TabListener {

        public TabListener(MainActivity mainActivity, String name) {
            // this(mainActivity,name);
        }

        @Override
        public void onTabSelected(android.app.ActionBar.Tab tab,
                FragmentTransaction ft) {
            Tab.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(android.app.ActionBar.Tab tab,
                FragmentTransaction ft) {

        }

        @Override
        public void onTabReselected(android.app.ActionBar.Tab tab,
                FragmentTransaction ft) {

        }

    }

}

<强> gradient_shape.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <corners android:radius="4dp" />

    <stroke
        android:width="1dp"
        android:color="#0078a5" />

    <gradient
        android:angle="90"
        android:endColor="#00adee"
        android:startColor="#0078a5" />

    <padding
        android:bottom="25dp"
        android:left="50dp"
        android:right="50dp"
        android:top="25dp" />

</shape>

<强>输出:

enter image description here

希望它会有所帮助。

答案 1 :(得分:0)

您不能在操作栏选项卡上设置不同的背景颜色,因为它们从操作栏本身获取颜色,因此,它们可以是相同的颜色 - 一种颜色,作为操作栏。

如果您想让每个标签都有不同的颜色,那么您必须编写自定义视图(带有视图寻呼机的水平LinearLayout中的Button小部件)来模拟标签的行为。