使用ActionBarTab中用户选择的颜色以编程方式设置ActionBarTab背景颜色,底部是标签选择器线颜色?

时间:2014-02-10 09:39:20

标签: android tabs android-actionbar

我想用底部颜色的标签选择线改变我的ActionBar的标签背景颜色。

我想通过使用java代码而不是xml来实现。

我尝试过创建ActionBar标签..

actionBar = getActionBar();


// Hide the action bar title
           ActionBar actionBar.setDisplayShowTitleEnabled(false);

        // Enabling Spinner dropdown navigation
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

         ActionBar.Tab PlayerTab = actionBar.newTab().setText("Fragment A");
          ActionBar.Tab StationsTab = actionBar.newTab().setText("Fragment B");

          //create the two fragments we want to use for display content
         //////////////////////// Fragment PlayerFragment = new AFragment();
         /////////////////// Fragment StationsFragment = new BFragment();

          //set the Tab listener. Now we can listen for clicks.
          ///////////////////PlayerTab.setTabListener(new MyTabsListener(PlayerFragment));
         ///////////////// ////StationsTab.setTabListener(new MyTabsListener(StationsFragment));

          //add the two tabs to the actionbar
          actionBar.addTab(PlayerTab);
          actionBar.addTab(StationsTab);

现在当我尝试使用标签行选择器颜色设置背景颜色时,我收到错误Java.lang.NullPointException

我的OnTabSelcted()方法..

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
RelativeLayout tabLayout = (RelativeLayout) tab.getCustomView();

//tab.setCustomView(getResources().getDrawable(R.drawable.tabs_selector_blue));

     System.out.println("Tab position is " +tab.getPosition());
     try{
     if(tab.getCustomView() == null){

tabLayout.setBackgroundResource(TABS_BACKGROUND[tab.getPosition()]);
         tab.setCustomView(tabLayout);
     }else{
         Toast.makeText(getApplicationContext(), "check for tabs", Toast.LENGTH_SHORT).show();
     }
     }catch(Exception e){
         e.printStackTrace();
     }

}

我为背景定义了一个自定义选择器,需要对其进行充气。

我上线tabLayout.setBackgroundResource(TABS_BACKGROUND[tab.getPosition()]);

请告诉我哪里是我的错误。

2 个答案:

答案 0 :(得分:2)

我发现你正在使用my solution。如果您在创建标签时未对其进行初始化,则tabLayout可能为空。以下是我在onTabSelected

中更改背景和文字颜色之前首先创建标签的代码
for (int i = 0; i < TABS.length; i++) {
    Tab tab = actionBar.newTab();
    tab.setText(TABS[i]);
    tab.setTabListener(this);
    tab.setCustomView(getTabView(i));  << see getTabView() method below  
    actionBar.addTab(tab, i, (currentTab == i));
}

getTabView()方法:

private View getTabView(int i) {
    // TODO Auto-generated method stub
    RelativeLayout r = (RelativeLayout) getLayoutInflater().inflate(
            R.layout.custom_tab, null);
    TextView t = (TextView) r.findViewById(R.id.custom_tab_text);
    t.setText(TABS[i]);
    int color;
    switch (i) {
    case MyObject.TYPE_A:
        color = MyObject.COLOR_A;
        break;
    case MyObject.TYPE_B:
        color = MyObject.B;
        break;
    case MyObject.TYPE_C:
        color = MyObject.COLOR_C;
        break;
    case MyObject.TYPE_E:
        color = MyObject.COLOR_E;
        break;
    case MyObject.TYPE_F:
        color = MyObject.COLOR_F;
        break;
    default:
        color = MyObject.COLOR_A;
        break;
    }

    t.setTextColor(color);
    return r;
}

最后,custom_tab.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:layout_margin="0dp">

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

</RelativeLayout>

答案 1 :(得分:1)

见声明

RelativeLayout tabLayout = (RelativeLayout) tab.getCustomView();

if条件

if(tab.getCustomView() == null){
     tabLayout.setBackgroundResource(TABS_BACKGROUND[tab.getPosition()]);
     tab.setCustomView(tabLayout);
}

现在,如果tab.getCustomView()返回null,则tabLayout也是nullif条件变为true。在if条件中,您引用的tabLayoutnull ...