【问题标题】:How to change color of Selected Tab如何更改选定选项卡的颜色
【发布时间】:2013-09-25 09:35:00
【问题描述】:

当标签被选中时如何改变它的颜色,看下面的截图:

我在 ActionBar 中显示橙色,就像我想用橙色代替浅蓝色一样。

为了在 ActionBar 背景中显示橙色,我使用以下代码:

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

    <style name="Theme.MyAppTheme" parent="android:style/Theme.Holo.Light">
         <item name="android:actionBarStyle">@style/Theme.MyAppTheme.ActionBar</item>
    </style>

   <style name="Theme.MyAppTheme.ActionBar" parent="android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#FF4444</item>
    </style>

</resources>

【问题讨论】:

标签: android android-actionbar


【解决方案1】:

// 您可以使用此更改选项卡文本和指示符

<com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabTextColor="@color/gray2"
        app:tabSelectedTextColor="@color/orange2"
        app:tabIndicatorColor="@color/orange2"/>
</com.google.android.material.appbar.AppBarLayout>

【讨论】:

    【解决方案2】:

    在您的 xml 中使用这一行 app:tabSelectedTextColor="@color/colorPrimaryDark"

    <com.google.android.material.tabs.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            app:tabMode="scrollable"
            android:layout_alignParentBottom="true"
            app:tabSelectedTextColor="@color/colorPrimaryDark"
            app:tabIndicatorColor="@color/colorPrimaryDark"
    
            >
        </com.google.android.material.tabs.TabLayout>
    

    【讨论】:

      【解决方案3】:

      使用此代码更改所选标签的颜色:-

      tabLayout.setTabTextColors(Color.parseColor("color_for_unselected_tab"), Color.parseColor("color_for_tab"));
      for tab-indicator
       tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#627179")));
      

      【讨论】:

        【解决方案4】:

        您可以使用此代码并设置图标 alpha ,它看起来像一个被选中而另一个被禁用。

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
        
            @Override
            public void onPageSelected(int position) {
                switch (position) {
                    case 0:
                        tabLayoutUserProfileTabs.getTabAt(0).getIcon().setAlpha(255);
                        tabLayoutUserProfileTabs.getTabAt(1).getIcon().setAlpha(128);
                        tabLayoutUserProfileTabs.getTabAt(2).getIcon().setAlpha(128);
                        tabLayoutUserProfileTabs.getTabAt(3).getIcon().setAlpha(128);
                        break;
                    case 1:
                        tabLayoutUserProfileTabs.getTabAt(0).getIcon().setAlpha(128);
                        tabLayoutUserProfileTabs.getTabAt(1).getIcon().setAlpha(255);
                        tabLayoutUserProfileTabs.getTabAt(2).getIcon().setAlpha(128);
                        tabLayoutUserProfileTabs.getTabAt(3).getIcon().setAlpha(128);
                        break;
                    case 2:
                        tabLayoutUserProfileTabs.getTabAt(0).getIcon().setAlpha(128);
                        tabLayoutUserProfileTabs.getTabAt(1).getIcon().setAlpha(128);
                        tabLayoutUserProfileTabs.getTabAt(2).getIcon().setAlpha(255);
                        tabLayoutUserProfileTabs.getTabAt(3).getIcon().setAlpha(128);
                        break;
                    case 3:
                        tabLayoutUserProfileTabs.getTabAt(0).getIcon().setAlpha(128);
                        tabLayoutUserProfileTabs.getTabAt(1).getIcon().setAlpha(128);
                        tabLayoutUserProfileTabs.getTabAt(2).getIcon().setAlpha(128);
                     tabLayoutUserProfileTabs.getTabAt(3).getIcon().setAlpha(255);
                        break;
                }
            }
        
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
        

        【讨论】:

          【解决方案5】:

          您可以使用此代码并设置 item_tab xml 文件的背景

          tab_selection.xml

          <?xml version="1.0" encoding="utf-8"?>
          <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:state_selected="true" android:state_pressed="false" 
                android:drawable="@drawable/tab_bg_selected" />
          <item android:state_selected="false" android:state_pressed="false" 
                android:drawable="@drawable/tab_bg_unselected" />
          <item android:state_pressed="true" 
                android:drawable="@drawable/tab_bg_pressed" />
          </selector>
          

          【讨论】:

            【解决方案6】:

            把这个函数调用给你的Activity,并把tabhost作为参数传递

            public static void setTabColor(TabHost tabhost) {
            
                        for (int i = 0; i < tabhost.getTabWidget().getChildCount(); i++) {
                            tabhost.getTabWidget().getChildAt(i)
                                    .setBackgroundResource(R.drawable.header_blank); // unselected
                        }
                        tabhost.getTabWidget().setCurrentTab(0);
                        tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab())
                                .setBackgroundResource(R.drawable.tab_selected_new); // selected
                                                                                        // //have
                                                                                        // to
                                                                                        // change
                    }
            

            按以下方式调用它

                    setTabColor(tabHost);
                    tabHost.setOnTabChangedListener(new OnTabChangeListener() {
            
                        @Override
                        public void onTabChanged(String arg0) {
            
                            setTabColor(tabHost);
                        }
                         });
            

            希望对你有用

            【讨论】:

              【解决方案7】:

              你可以这样使用

              tab_background_select.xml

              <selector xmlns:android="http://schemas.android.com/apk/res/android">
                  <item android:state_selected="true"
                      android:drawable="@drawable/tab_background" />// for selected
                   <item android:drawable="@drawable/tab" /> // for normal
              </selector>
              

              【讨论】:

                【解决方案8】:

                我真的建议你使用Actionbar Style Generator

                使用该工具,您可以轻松地为工具栏中的图形元素设置主题。

                【讨论】:

                • 现在已经过时了。
                【解决方案9】:
                myTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener(){
                  @Override
                  public void onTabChanged(String tabId) {
                    int tab = myTabHost.getCurrentTab();
                    View view = myTabHost.getTabWidget().getChildAt(tab).setBackgroundColor(Color.CYAN);
                  }
                });
                

                【讨论】:

                  【解决方案10】:

                  创建一个选择器文件,其中包含您想要的颜色应用于选项卡 xml,如下所示:

                   <?xml version="1.0" encoding="utf-8"?>
                          <!-- 
                          Copyright (c) Josh Clemm 2010
                           -->
                      <selector xmlns:android="http://schemas.android.com/apk/res/android">
                  
                          <!--  Active tab -->
                          <item android:state_selected="true" android:state_focused="false"
                          android:state_pressed="false" android:drawable="@drawable/dm_tab_highlight" />
                          <!--  Inactive tab -->
                      <!--    <item android:state_selected="false" android:state_focused="false" -->
                      <!-- android:state_pressed="false" android:drawable="@drawable/tabbarbg" /> -->
                  
                          <!--  Pressed tab -->
                          <item android:state_pressed="true" android:drawable="@drawable/dm_tab_highlight" />
                  
                  
                      </selector> 
                  

                  【讨论】:

                    【解决方案11】:

                    改变标签栏背景:

                    actionBar.setStackedBackgroundDrawable(new ColorDrawable(yourOwnColor)); 
                    

                    【讨论】:

                    • setStackedBackgroundDrawable 更改整个栏的背景。 OP 只想更改操作栏上选定的选项卡。
                    猜你喜欢
                    • 1970-01-01
                    • 2018-01-12
                    • 1970-01-01
                    • 2017-04-24
                    • 1970-01-01
                    • 2012-07-17
                    • 2016-04-06
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多