`

Android: 自定义Tab样式,一种简单的方式。 《转载》

 
阅读更多


之前看到过论坛里已经有人发过自定义Tab样式的帖子,感觉有些复杂了,这里分享个简单的方法。

1.制作4个9patch的tab样式,可参考android默认的资源
tab_unselected.9.png    tab_selected.9.png    tab_press.9.png    tab_focus.9.png

这4个资源分别代表Tab的4种状态。

2.定义Tab的selector样式(就叫它tab_indicator.xml好了),将其放入drawable文件夹下,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3.     <!-- Non focused states -->
  4.     <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected" />
  5.     <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected" />
  6.     <!-- Focused states -->
  7.     <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_focus" />
  8.     <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_focus" />
  9.     <!-- Pressed -->
  10.     <item android:state_pressed="true" android:drawable="@drawable/tab_press" />
  11. </selector>
复制代码


3.编写indicator的布局文件(不妨也叫tab_indicator.xml),将其放入layout文件夹下,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="0dip"
  4.     android:layout_height="64dip"
  5.     android:layout_weight="1"
  6.     android:layout_marginLeft="-3dip"
  7.     android:layout_marginRight="-3dip"
  8.     android:orientation="vertical"
  9.     android:background="@drawable/tab_indicator">
  10.     <ImageView android:id="@+id/icon"
  11.         android:layout_width="wrap_content"
  12.         android:layout_height="wrap_content"
  13.         android:layout_centerHorizontal="true"
  14.     />
  15.     <TextView android:id="@+id/title"
  16.         android:layout_width="wrap_content"
  17.         android:layout_height="wrap_content"
  18.         android:layout_alignParentBottom="true"
  19.         android:layout_centerHorizontal="true"
  20.         style="?android:attr/tabWidgetStyle"
  21.     />
复 制代码


4.接下来就是在TabActivity中使用我们自己编写的Tab样式了:

  1. // 首先获取TabWidget
  2. mTabHost = getTabHost();
  3. LinearLayout layout = (LinearLayout)mTabHost.getChildAt(0);
  4. TabWidget tw = (TabWidget)layout.getChildAt(0);
复制代码

这里可能有人会问为什么 LinearLayout layout = (LinearLayout)mTabHost.getChildAt(0),接着看,Android源代码中是这样定义TabHost的(下面是原文件 tab_content.xml定义),他的第一个也就是索引0的子孩子是一个线性布局,该孩子在里面才是定义了TabWidget视图。

  1. <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost"
  2.         android:layout_width="fill_parent" android:layout_height="fill_parent">
  3.         <LinearLayout android:orientation="vertical"
  4.             android:layout_width="fill_parent" android:layout_height="fill_parent">
  5.         <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent"
  6.                 android:layout_height="wrap_content" android:layout_weight="0" />
  7.         <FrameLayout android:id="@android:id/tabcontent"
  8.                 android:layout_width="fill_parent" android:layout_height="0dip"
  9.             android:layout_weight="1"/>
  10.         </LinearLayout>
  11. </TabHost>
复制代码


文接上文,废话不表。
然后用类似如下代码创建TabSpec,就大功告成了。

  1. RelativeLayout tabIndicator1 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tab_indicator, tw, false);
  2. TextView tvTab1 = (TextView)tabIndicator1.getChildAt(1);
  3. tvTab1.setText("tab1");//你也可以拿到ImageView设置该Tab的图片Icon
  4. mTabHot = mTabHost.newTabSpec("TAB_1")
  5.                 .setIndicator(tabIndicator1)
  6.                 .setContent(contentIntent);
复制代码
分享到:
评论

相关推荐

    android开发资料大全

    Android Wifi方法大全【总有一种方法适合你】 android开发环境搭建篇详尽的教程实例汇 图形图像之图像处理(缩放 旋转 转化) android开发之【腾讯微博android客户端开发】Parameter类和SyncHttp 网友自己写的...

    Android入门到精通

    第一篇Android系统结构和SDK使用 第1章 Android的系统介绍 1.1 系统介绍 1.2 软件结构和使用的工具 第2章 Android SDK的开发环境 2.1 Android SDK的结构 2.2 Android SDK环境安装 2.3 Android中运行仿真器环境 2.4 ...

    Android仿淘宝订单页面效果

    当然实现的方法有很多,我知道的有两种方法:一种是采用listview嵌套listview的方式,这种方式需要重写listview中onMearsure方法;还有一种是采用接口回调的方式,这种方式主要对后台返回的数据有依赖; 今天主要...

    筛选菜单库DropDownMenu­_.zip

    只需要传递字符串数组即可,如果使用自定义样式只需传递customview即可以下为原始特性:支持多级菜单你可以完全自定义你的菜单样式,我这里只是封装了一些实用的方法,Tab的切换效果,菜单显示隐藏效果等并非用...

    Android使用开源组件PagerBottomTabStrip实现底部菜单和顶部导航功能

    (1)底部选择菜单功能应该是大多app都会用到的,实现方式也有很多种,比较笨的方法可以自定义一个xml,下方布局样式,每次点击不同按钮时跳转到不同activity,这个activity重新加载一下底部菜单 (2)今天介绍一个...

    Android 应用开发入门教程(经典版)

    第一篇 Android 系统结构和SDK 使用............................................................................................................................ 5 第1 章 Android 的系统介绍..................

    Android入门到精通详解

    第一篇Android系统结构和SDK使用 ...............................................................................4 第1章 Android的系统介绍 ...................................................................

    Google Android入门到精通详解

    第一篇Android系统结构和SDK使用 ...............................................................................4 第1章 Android的系统介绍 ...................................................................

    IONIC 功能全演示

    - 另外一种方式,在webstorm里对index.html 按debug运行,同样是“所见即所得”的方式开发 ### CROS支持 - 生产环境的 CROS支持要么使用jsonp技术,要么在服务端设置代理。 - 而开发环境下要么 基于不安全做法,...

    delphi11(实际上是delphi10.5)补丁

    一、IDE 1、对IDE的高DPI支持,涵盖了最新的4k+显示器,整个字体和图标更干净、更清晰。 2、多显示器和多窗口改进:在多个窗口中同时设计和编辑同一个表单的代码 3、完全重建的欢迎页,具有原生的外观和感觉,以及...

    Android应用开发入门教程(经典版)

    第一篇Android系统结构和SDK使用............................................................................................................................5 第1章 Android的系统介绍........................

    Androids手机开发教程——从入门到精通详解

    第一篇 Android 系统结构和 SDK 使用...............................................................................4 第 1 章 Android 的系统介绍............................................................

Global site tag (gtag.js) - Google Analytics