博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义android的tab样式
阅读量:7298 次
发布时间:2019-06-30

本文共 2997 字,大约阅读时间需要 9 分钟。

 

android项目中碰到需要替换tabHost默认样式的情况,需要达到下图的效果:
为了做成这样的效果,花了些时间,这里做个笔记,给有需要的朋友。
步骤一:新建一个xml布局文件,命名main.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"
android:background
="@color/white"
>
  
<
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"
      
android:gravity
="center_horizontal|center_vertical"
/>
    
<
FrameLayout
android:id
="@android:id/tabcontent"
      
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
>
    
</
FrameLayout
>
  
</
LinearLayout
>
</
TabHost
>
步骤二:在Activity中添加我们的tab
代码如下
@Override
public
void onCreate(Bundle savedInstanceState) {
  
super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  mTabHost = getTabHost();
       
  Intent intent1 = new Intent(this,OfficialActivity.class);
  createTab("公共聊天室",intent1);
       
  Intent intent2 = new Intent(this, NearByActivity.class);
  createTab("周边",intent2);
       
  Intent intent3= new Intent(this, HistoryActivity.class);
  createTab("历史",intent3);
       
  mTabHost.setCurrentTab(1);
}
 private void createTab(String text ,Intent intent){          mTabHost.addTab(mTabHost.newTabSpec(text).setIndicator(createTabView(text)).setContent(intent));
    }
    private View createTabView(String text) {
            View view = LayoutInflater.from(this).inflate(R.layout.tab_indicator, null);
            TextView tv = (TextView) view.findViewById(R.id.tv_tab);
            tv.setText(text);
            return view;
    }
步骤三:在createTabView方法中,我们载入了布局文件tab_indicator.xml,改布局很简单,就是放置一个带背景的布局,在布局中放一个textView用于显示tab标题,以下为该布局文件内容
<?
xml
version
="1.0"
encoding
="utf-8"
?>
<
LinearLayout
xmlns:android
="http://schemas.android.com/apk/res/android"
  
android:layout_height
="fill_parent"
android:layout_width
="fill_parent"
  
android:orientation
="vertical"
android:gravity
="center"
  
android:theme
="@android:style/Theme.NoTitleBar"
android:background
="@drawable/chat_tab_selector"
>
  
<
TextView
android:id
="@+id/tv_tab"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
  
android:text
="tab1"
android:textColor
="@color/white"
/>
</
LinearLayout
>
步骤四:在上面的布局文件中我们把该布局的背景定义为chat_tab_selector,这里同样需要在drawable文件夹下新建chat_tab_selector.xml,内容很简单,就是做一个按下时的背景切换,内容如下:
<?
xml
version
="1.0"
encoding
="utf-8"
?>
        
<
selector xmlns:android = "http://schemas.android.com/apk/res/android"
>    
        
<
item    
        android:state_focused = "true"    
        android:drawable = "@drawable/topbar_bg_down"    
        
/>
        
<
item    
        android:state_selected = "true"    
        android:drawable = "@drawable/topbar_bg_down"    
        
/>
        
<
item    
        android:state_pressed = "true"    
        android:drawable = "@drawable/topbar_bg_down"    
        
/>    
        
<
item android:drawable = "@drawable/topbar_background"
/>    
        
</
selector
>    
里面做了两张图进行状态切换,这两张图同样放drawable下就可以了
至此,自定义tab的步骤就完成了。如果要做成更复杂的样式,大家可以在此基础上进行扩展

转载于:https://www.cnblogs.com/sp5i5s/archive/2012/04/19/2456935.html

你可能感兴趣的文章
linux 内核该怎么优化
查看>>
自学asp.net笔记 - 第一节 C#基础简略学习
查看>>
selinux、暱名上传文件到ftp服务器
查看>>
socket编程原理
查看>>
Spark操作—aggregate、aggregateByKey详解
查看>>
正式学习react(二)
查看>>
将命令passive-interface用于OSPF
查看>>
mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结
查看>>
nginx 学习加实战(1 nginx的安装)
查看>>
关于Integer对象比较,和int基本类型比较的一些问题
查看>>
华为交换机抓包分析
查看>>
微软实用程序Sysinternals Suite工具包
查看>>
Java静态属性、静态方法、非静态属性、非静态方法的继承问题简单了解
查看>>
newgrp
查看>>
无线配置案例三
查看>>
static和extern
查看>>
zencart新增分类点击不进去的解决办法
查看>>
一些ghost版本的xp不能远程的问题
查看>>
强大的正则表达式
查看>>
FTP: Configuring server users..
查看>>