TabWidget текущий цвет нижней строки вкладки
у меня есть TabWidget, для которого я включил и установил stripLeft и stripRight...
mTabHost.getTabWidget().setStripEnabled(true);
mTabHost.getTabWidget().setRightStripDrawable(R.drawable.redline);
mTabHost.getTabWidget().setLeftStripDrawable(R.drawable.redline);
как вы можете видеть на изображении ниже, это не изменяет цвет нижней строки текущей выбранной вкладки (вкладка 2).

как я могу изменить цвет нижней строки текущей выбранной вкладки, которая по умолчанию является синей на данный момент? (Я предполагаю, что синий цвет устанавливается по умолчанию AppTheme стиль styles.xml.)
I посмотрел на этот ответ, но он не говорит, Как изменить цвет...
9 ответов:
цвет индикатора tab устанавливается селектором drawable, который можно найти здесь и выглядит так:
<!-- AOSP copyright notice can be found at the above link --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_holo" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" /> <!-- Pressed --> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" /> </selector>чертежи, которые использует селектор, все окрашены в этот светло-синий цвет. Вы можете заменить эти чертежи своими собственными перекрашенными версиями. Оригиналы выглядят так (оригиналы маленькие, ссылки включены):
- tab_unselected_holo
![]()
- tab_selected_holo
![]()
- tab_unselected_focused_holo
![]()
- tab_selected_focused_holo
![]()
- tab_unselected_pressed_holo
![]()
- tab_selected_pressed_holo
![]()
вы хотите скопировать вышеуказанный селектор в свой собственный проект вместе с чертежами. Тогда вы захотите чтобы перекрасить чертежи в любой цвет, который вы хотите, чтобы они были. Тогда вы хотите установить селектор в качестве фона для вкладки показателей. Вы можете сделать это следующим образом (после настройки вкладок):
TabHost host = (TabHost)view.findViewById(R.id.tab_host); TabWidget widget = host.getTabWidget(); for(int i = 0; i < widget.getChildCount(); i++) { View v = widget.getChildAt(i); // Look for the title view to ensure this is an indicator and not a divider. TextView tv = (TextView)v.findViewById(android.R.id.title); if(tv == null) { continue; } v.setBackgroundResource(R.drawable.your_tab_selector_drawable); }там может быть более простой способ сделать это, установив свой собственный макет индикатора клиента с селектором фона, но это то, что работало проще всего для меня.
вот как я изменил мои вкладки,
private void changetabs(TabWidget tabWidget) { // Change background for(int i=0; i < tabWidget.getChildCount(); i++) tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_selector); }и мой tab_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_holo" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" /> <!-- Pressed --> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />надеюсь, что это поможет кому-то.
можно использовать приложение:tabIndicatorColor для этой цели. Он изменит выбранный цвет линии индикатора вкладки в соответствии с вашим требованием.
<android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabIndicatorColor="@android:color/white" app:tabMode="fixed" />
Если кто-то натыкается на него, есть онлайн-инструмент для быстрого создания чертежей (патч 9) для вкладок. Просто выберите цвет и нажмите кнопку здесь вы идете ...
спасибо Джеффу Gilfelt
генератор стиля панели действий Android позволяет легко создавать простой, привлекательный и бесшовный пользовательский стиль панели действий для вашего приложения Android. Он будет генерировать все необходимые девять патч-активов плюс связанные XML-чертежи и стили, которые вы можно скопировать прямо в ваш проект.
http://jgilfelt.github.io/android-actionbarstylegenerator/
вы можете использовать фильтр,
Это будет применено к региону, который не является прозрачнымtabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);одна строка кода - нет необходимости менять Штаты.
цвет акцента используется по умолчанию в качестве активного цвета вкладки. Вы можете установить/изменить его в
style.xmlfile:<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <item name="colorAccent">@color/myAccentColor</item> </style>
мой способ решить эту проблему-использовать setBackgroundResource. Во-первых, вы должны создать точно такой же шаблон
line_label_1_pressed.xml
<item android:top="-6dp" android:left="-6dp" android:right="-6dp"> <shape> <size android:height="50dp"/> <solid android:color="@android:color/transparent"/> <stroke android:color="@color/myColor" android:width="6dp"/> </shape> </item>line_label_1.xml
<item> <shape> <solid android:color="@android:color/transparent" /> </shape> </item>а затем создать tab_selector.xml как следовать
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/line_label_1_pressed" android:state_selected="true"/> <item android:drawable="@drawable/line_label_1"/>затем setbackgroudResource с помощью tab_selector.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/tab_selector" android:gravity="center_horizontal|center_vertical" />
Я нашел другое решение, открытого стили.xml и изменить одну строчку:
res - > значения - > стили.XML
<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@android:color/holo_orange_light</item> <!-- set the color in this line --> <item name="windowNoTitle">true</item> </style>
Comments