Android自定义TabWeight (修改样式)

本文介绍如何在Android应用中使用TabHost并自定义其样式,包括创建界面、定义tab_item布局及通过代码控制TabHost的各项功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 郑州小白一个,最近公司不赶项目了,事情少了,本来以为轻松几天谁知道,让改颜色,我的天。这也忒多了把。此时心里有句妈卖批不知当讲不当讲。(负面情绪抱 歉。)进入整体。其实修改样式很简单,这里是想做个记录。毕竟好记性不如烂笔头 嘛。也算是分享把,如果对您有帮助,我也会很高兴的。

1. 编写界面。

    <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/ll_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:orientation="vertical" >

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="@color/title_bg" >

                <ImageButton
                    android:id="@+id/ib_back"
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:layout_centerVertical="true"
                    android:background="@null"
                    android:src="@drawable/ib_back" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:text="系统信息"
                    android:textColor="@color/black"
                    android:textSize="@dimen/titel_textsize" />

                <TextView
                    android:id="@+id/tv_operate"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="@dimen/big_margin_or_padding"
                    android:text="添加"
                    android:textColor="@color/black"
                    android:textSize="@dimen/small_textsize"
                    android:visibility="gone" />
            </RelativeLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="0.5dp"
                android:background="@color/view_color" />
        </LinearLayout>

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:gravity="center" />

        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/small_margin_or_padding"
            android:background="@color/view_color" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>

</TabHost>
   这个是我的项目中用的代码。需要注意的就是 控件中的 id ,必须要使用系统的id。相信大多人都知道。别的就没有什么好多解释的代码。

2. 创建 tab_item 布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="vertical" >

    <!--  -->

    <TextView
        android:id="@+id/tab_lable"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="TextView" />

</LinearLayout>

代码很简单就是放入一个文字这里就是我们顶部的文字。

3. 代码的控制

// 首先获取TabWidget
        LayoutInflater inflater = getLayoutInflater();

        View view1 = inflater.inflate(R.layout.tab_item_system, null);
        TextView txt1 = (TextView) view1.findViewById(R.id.tab_lable);
        txt1.setText("未读");

        View view2 = inflater.inflate(R.layout.tab_item_system, null);
        TextView txt2 = (TextView) view2.findViewById(R.id.tab_lable);
        txt2.setText("已读");
        // 得到TabHost对象实例
        mTabHost = (TabHost) findViewById(android.R.id.tabhost);
        // 调用 TabHost.setup()
        mTabHost.setup();
        TabWidget tabWidget = mTabHost.getTabWidget();
        // 创建Tab标签
        Intent intent;
        intent = new Intent().setClass(this, ClientUnReadSysActivity.class);
        mTabHost.addTab(mTabHost.newTabSpec("wd").setIndicator(view1)
                .setContent(intent));
        intent = new Intent().setClass(this, ClientReadSysActivity.class);
        mTabHost.addTab(mTabHost.newTabSpec("yd").setIndicator(view2)
                .setContent(intent));

        // 设置第一次打开时默认显示的标签
        mTabHost.setCurrentTab(0);
        // 初始化Tab的颜色,和字体的颜色
        updateTab(mTabHost);
        // 选择监听器
        mTabHost.setOnTabChangedListener(new OnReceiveTabChangedListener());

/**
     * 更新Tab标签的颜色,和字体的颜色
     * 
     * @param tabHost
     */
    @SuppressLint("NewApi")
    private void updateTab(final TabHost tabHost) {
        for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
            View view = tabHost.getTabWidget().getChildAt(i);
            TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i)
                    .findViewById(R.id.tab_lable);
            tv.setTextSize(16);
            tv.setTypeface(Typeface.SERIF, 0); // 设置字体和风格
            if (tabHost.getCurrentTab() == i) {
                // 选中
                view.setBackground(getResources().getDrawable(
                        R.drawable.system_select));// 选中后的背景
                tv.setTextColor(this.getResources().getColorStateList(
                        R.color.home_orange));
            } else {
                // 不选中
                view.setBackground(getResources().getDrawable(
                        R.drawable.system_unselect));// 非选择的背景
                tv.setTextColor(this.getResources().getColorStateList(
                        android.R.color.black));
            }
        }
    }

class OnReceiveTabChangedListener implements OnTabChangeListener {

        @Override
        public void onTabChanged(String tabId) {
            mTabHost.setCurrentTabByTag(tabId);
            mTabHost.setCurrentTabByTag(tabId);
            updateTab(mTabHost);
        }
    }

当然代码中 还用到两个图片 就是 你想要选中的 或者 没有选中的 item的样式。这个有条件的 找 UI 要一下。没有的 就没有然后了。代码 都有了 原理我都不多讲了,很简单的东西。就这样 总结完毕。

扯淡:提前祝大家 新年快乐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值