2013-08-02 2 views
0

У меня есть следующая вкладка ActionBar в моем приложении. Мне было интересно, как наилучшим образом изменить цвета вокруг моего приложения.Изменение цвета вкладки ActionBar

enter image description here

  1. Каждая вкладка имеет различный фон для содержимого. Как добавить отдельные цвета фона для каждой вкладки?
  2. Как изменить цвет светло-голубой полосы на белый, чтобы придать ей вид 3D ?

Я видел следующий код:

ActionBar ab = getActionBar(); 
//ab.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff"))); 

Но эта линия меняет цвет для всех вкладок только одного цвета.

код Tab в моем приложении является:

ActionBar ab = getActionBar(); 
     //ab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff"))); not changing the tab color 
     //ab.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff"))); 
     ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     Tab tab = ab.newTab() 
       .setText("TY1") 
       .setTabListener( 
         new MyTabListener(this, TY1.class.getName())); 
     ab.addTab(tab); 

     tab = ab.newTab() 
       .setText("TY2") 
       .setTabListener( 
         new MyTabListener(this, TY2.class.getName())); 
     ab.addTab(tab); 

     tab = ab.newTab() 
       .setText("ty3") 
       .setTabListener( 
         new MyTabListener(this, TY3.class.getName())); 
     ab.addTab(tab); 

Любой и вся помощь оценена. Я также могу использовать XML, если кто-то указывает мне в правильном направлении.

ответ

2

Вы можете настроить пользовательский вид для каждой вкладки. Создайте новый ресурс макета для вкладки (он может просто быть TextView). Оставьте свой фон пустым и сделайте девять патчей, доступных для индикатора выбора. Получить LayoutInflater с помощью

LayoutInflater inflater = getSystemService(LAYOUT_INFLATER_SERVICE); 

Затем для каждой вкладки, вы можете сделать это:

Tab tab = ab.newTab() 
     .setText("TY1") 
     .setTabListener(new MyTabListener(this, TY1.class.getName())); 
View tabView = inflater.inflate(R.layout.my_tab_layout, null); 
tabView.setBackgroundColor(...); // set custom color 
tab.setCustomView(tabView); 
ab.addTab(tab); 
+0

Как это работает на примере моего кода? Скажем, зеленый фон для первой вкладки синий фон для второй вкладки и желтый фон на третьей вкладке? – Si8

+0

Измените аргумент, переданный 'tabView.setBackgroundColor()' для каждой вкладки. – Karakuri

+0

Извините за то, что вы столкнулись с этим вопросом, но как выглядит файл xml-макета? Я пробовал это решение, но я понятия не имею, как сделать 9-патч доступным. – Razgriz

1

Вы можете изменить цвет фона ActionBar, определив свой стиль, как:

<resources> 
    <style name="MyTheme" parent="@android:style/Theme.Holo.Light"> 
     <item name="android:actionBarStyle">@style/MyActionBar</item> 
    </style> 
    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> 
     <item name="android:background">ANY_HEX_COLOR_CODE</item> 
    </style> 
</resources> 

пойти: http://jgilfelt.github.io/android-actionbarstylegenerator/#name=example&compat=holo&theme=light&actionbarstyle=solid&texture=0&hairline=0&backColor=E4E4E4%2C100&secondaryColor=D6D6D6%2C100&tabColor=33B5E5%2C100&tertiaryColor=F2F2F2%2C100&accentColor=33B5E5%2C100&cabBackColor=FFFFFF%2C100&cabHighlightColor=33B5E5%2C100

и создать панель действий затем загрузить его. После его загрузки вы можете использовать его в своем проекте.

1

Для тех, кто ищет более подробный пример кода о том, как создать представление пользовательских вкладок, а затем изменить форматирование этой вкладки , вы можете увидеть мой ответ на https://stackoverflow.com/a/28389366/3268329. Этот вопрос связан с изменением цвета текста вкладки, когда выбрана определенная вкладка, но вы можете легко изменить код, чтобы вместо этого изменить фон или сделать все, что вам нужно.

https://stackoverflow.com/a/18491600/3268329 (ответ С.Тионгане) также показывает, как настроить различные фоновые ресурсы.

Смежные вопросы