zoukankan      html  css  js  c++  java
  • Android TabHost 动态修改图标或者动态改变标题

    那时客户需要实现在TabHost标题上动态显示从数据库获取的个数。起初这样思考的,从数据库 获取个数是非常简单,但是要把获取的个数显示在TabHost标题,思前想后,想用Handler来异步实现消息传递。

        如果将图标或者标题的变量设置为全局变量,你们应该知道我的目的吧。也就是为了在这个类不断的进行赋值。

        先来简单的认识下TabHost吧。

    xml的文件代码:

    <?xml version="1.0" encoding="utf-8"?>
    <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:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
                <TextView
                    android:id="@+id/textview1"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="this is a tab" />
                <TextView
                    android:id="@+id/textview2"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="this is another tab" />
                <TextView
                    android:id="@+id/textview3"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:text="this is a third tab" />
         </FrameLayout>
        </LinearLayout>
    </TabHost>

    说明一下红色的标注,我们应该不可以改变的吧。

    Activity类的代码:

    public class MainActivity extends TabActivity
    {
     //声明TabHost对象
     TabHost mTabHost;
     
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState)
     {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      
      //取得TabHost对象
      mTabHost = getTabHost();
        
      /* 为TabHost添加标签 */
      //新建一个newTabSpec(newTabSpec)
      //设置其标签和图标(setIndicator)
      //设置内容(setContent)
         mTabHost.addTab(mTabHost.newTabSpec("tab_1")
           .setIndicator("TAB 1",getResources().getDrawable(R.drawable.img1))
           .setContent(R.id.textview1));
         mTabHost.addTab(mTabHost.newTabSpec("tab_2")
           .setIndicator("TAB 2",getResources().getDrawable(R.drawable.img2))
           .setContent(R.id.textview2));
         mTabHost.addTab(mTabHost.newTabSpec("tab_3")
           .setIndicator("TAB 3",getResources().getDrawable(R.drawable.img3))
           .setContent(R.id.textview3));
        
         //设置TabHost的背景颜色
         mTabHost.setBackgroundColor(Color.argb(150, 22, 70, 150));
         //设置TabHost的背景图片资源
         mTabHost.setBackgroundResource(R.drawable.bg0);
        
         //设置当前显示哪一个标签
         mTabHost.setCurrentTab(0);
        
         //标签切换事件处理,setOnTabChangedListener
         mTabHost.setOnTabChangedListener(new OnTabChangeListener()
         {
                @Override
                public void onTabChanged(String tabId)
                {
                }            
         });
     }
    }

    转入核心问题吧。

    1.将TabHost的标题的图标改变吧。

    首先我们应该获取到布局View,再获取对应的控件,图标应该是ImageView,文本应该是TextView。

    代码如下:

    View mView = mTabHost.getTabWidget().getChildAt(0);//0是代表第一个Tab
    ImageView imageView = (ImageView)mView.findViewById(android.R.id.icon);//获取控件imageView
    imageView .setImageDrawable(getResources().getDrawable(R.drawable.img3)); //改变我们需要的图标
    imageView = (ImageView)mTabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
    imageView .setImageDrawable(getResources().getDrawable(R.drawable.img2));
    imageView  = (ImageView)mTabHost.getTabWidget().getChildAt(2).findViewById(android.R.id.icon);
    imageView .setImageDrawable(getResources().getDrawable(R.drawable.img1));

    2.将TabHost的标题改变吧。

    TextView textview = (TextView)mTabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.title);
    textview.setTextSize(1);
    textview = (TextView)mTabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.title);
    textview.setTextSize(2);
    textview = (TextView)mTabHost.getTabWidget().getChildAt(2).findViewById(android.R.id.title);
    textview.setTextSize(3);

    其实获取了View,我们还可以再此基础上可以设置标题的颜色啊,字体啊,字体大小等等哦。

  • 相关阅读:
    BootStrap详解之(一)
    Centos6.5安装与配置Tomcat-8的方法
    Centos下安装jdk详解
    Html基础详解之(jquery)之二
    四层和七层负载均衡的区别
    linux下用script和scriptreplay对命令行操作录像
    Linux批量部署工具Expect
    Linux日常之Ubuntu系统中sendmail的安装、配置、发送邮件
    Linux日常之定时向文件传内容
    Linux日常之以当前时间命名文件
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4276559.html
Copyright © 2011-2022 走看看