我想用底部颜色的标签选择线改变我的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()]);
请告诉我哪里是我的错误。
答案 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
也是null
,if
条件变为true
。在if
条件中,您引用的tabLayout
是null
...