自定义Android TabHost的背景及文字

在做Android开发时,默认的系统控件的UI风格跟应用的整体UI风格可能不搭配,这时就需要修改Android系统控件的UI样式,使之与应用协调。就拿TabHost控件为例,我们的应用整体颜色是红色,但Android的TabHost控件是灰色的,这时就需要对TabHost进行自定义。

点击放大图片点击放大图片
默认TabHost样式 修改后的TabHost样式

修改TabHost样式很简单,下面就直接上代码。

    package com.sunchis.demo; 
     
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.Gravity; 
    import android.view.Window; 
    import android.widget.RelativeLayout; 
    import android.widget.TabHost; 
    import android.widget.TabWidget; 
    import android.widget.TextView; 
    import android.widget.TabHost.OnTabChangeListener; 
     
    public class MainActivity extends Activity { 
        private TabHost tabHost; 
         
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            requestWindowFeature(Window.FEATURE_NO_TITLE);  // 设置无标题栏 
            setContentView(R.layout.tab_layt); 
             
            tabHost = (TabHost) findViewById(R.id.customer_tabhost); 
            tabHost.setup();    // 记得要用setup()方法来初始化TabHost 
             
            tabHost.addTab(tabHost.newTabSpec("tab_1").setIndicator("分类一").setContent(R.id.tab_1)); 
            tabHost.addTab(tabHost.newTabSpec("tab_2").setIndicator("分类二").setContent(R.id.tab_2)); 
             
            // 初始化设置一次标签背景 
            updateTabStyle(tabHost); 
             
            // 当某个Tab被选中时,则更新背景样式 
            tabHost.setOnTabChangedListener(new OnTabChangeListener() { 
                @Override 
                public void onTabChanged(String tabId) { 
                    updateTabStyle(tabHost); 
                } 
            }); 
        } 
         
        /** 
         * 更新Tab标签的背景图 
         * @param tabHost 
         */ 
        private void updateTabStyle(final TabHost mTabHost) { 
            TabWidget tabWidget = mTabHost.getTabWidget(); 
            for (int i = 0; i < tabWidget.getChildCount(); i++) { 
                RelativeLayout tabView = (RelativeLayout) mTabHost.getTabWidget().getChildAt(i); 
                 
                TextView text = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title); 
                text.setTextSize(20); 
                 
                // 文字居中 
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) text.getLayoutParams(); 
                params.width = RelativeLayout.LayoutParams.MATCH_PARENT; 
                params.height = RelativeLayout.LayoutParams.MATCH_PARENT; 
                // params.addRule(RelativeLayout.CENTER_IN_PARENT); 
                text.setLayoutParams(params); 
                text.setGravity(Gravity.CENTER); 
                 
                if (mTabHost.getCurrentTab() == i) { 
                    // 选中 
                    tabView.setBackgroundResource(R.drawable.bg_tab_selected); 
                    text.setTextColor(this.getResources().getColorStateList(android.R.color.black)); 
                } else { 
                    // 未选中 
                    tabView.setBackgroundResource(R.drawable.bg_tab_normal); 
                    text.setTextColor(this.getResources().getColorStateList(android.R.color.darker_gray)); 
                } 
            } 
        } 
    } 


布局文件tab_layt.xml:

    <?xml version="1.0" encoding="utf-8"?> 
    <TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/customer_tabhost" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" > 
         
        <LinearLayout 
            android:layout_width="match_parent" 
            android:layout_height="match_parent" 
            android:background="#ffffff" 
            android:orientation="vertical" > 
     
            <TabWidget 
                android:id="@android:id/tabs" 
                android:layout_width="match_parent" 
                android:layout_height="wrap_content" > 
            </TabWidget> 
     
            <FrameLayout 
                android:id="@android:id/tabcontent" 
                android:layout_width="match_parent" 
                android:layout_height="match_parent" > 
     
                <LinearLayout 
                    android:id="@+id/tab_1" 
                    android:layout_width="match_parent" 
                    android:layout_height="match_parent" > 
                </LinearLayout> 
     
                <LinearLayout 
                    android:id="@+id/tab_2" 
                    android:layout_width="match_parent" 
                    android:layout_height="match_parent" > 
                </LinearLayout> 
            </FrameLayout> 
        </LinearLayout> 
    </TabHost> 


原文地址:https://www.cnblogs.com/xieyuan/p/3787409.html