Android 自定义Tabhost

转载 2015年07月10日 15:00:33

转载自:http://my.oschina.net/aowu/blog/36282
首先上效果图
这里写图片描述

1.先上AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.priscilla"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".MyTab" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".TabContent" >
        </activity>
    </application>

</manifest>



2  MyTab.java

package com.priscilla;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.WeakHashMap;

import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
//import android.view.LayoutInflater;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TabWidget;
import android.widget.TextView;
import android.widget.TabHost.TabSpec;

public class MyTab extends TabActivity {
 /** Called when the activity is first created. */

 private TabHost mTabhost;
 private TabWidget mTabWidget;
 private LayoutInflater mInflater;
 private List<TextView> mtext;
 private List<TabSpec> mTabSpec;
 private List<LinearLayout> linearLayout;
 private List<Intent> intent; 
 private Context mContext;

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  mContext = this;
  mInflater = LayoutInflater.from(this);

  // mTabhost = this.getTabHost();// 从TabActivity上面获取放置Tab的TabHost
  mTabhost = (TabHost) findViewById(android.R.id.tabhost);
  mTabWidget = (TabWidget) findViewById(android.R.id.tabs);

  mTabSpec = new ArrayList<TabSpec>();
  linearLayout = new ArrayList<LinearLayout>();
  mtext = new ArrayList<TextView>();
  intent = new ArrayList<Intent>();

  creatTab();
 }

 public void creatTab() {

  for (int i = 0; i < 3; i++) {
   mTabSpec.add(mTabhost.newTabSpec("tab" + i));
   linearLayout.add((LinearLayout) mInflater.inflate(
     R.layout.tabwidget, null));
   mtext.add((TextView) linearLayout.get(i)
     .findViewById(R.id.tab_name));
   mtext.get(i).setText(
     mContext.getResources().getString(R.string.tab_name,
       String.valueOf(i)));
   mTabSpec.get(i).setIndicator(linearLayout.get(i));
   //mTabSpec.get(i).setContent(list.get(i));
   intent.add(new Intent(mContext, TabContent.class));
   Log.v("---whty---", mTabSpec.get(i).getTag());
   Bundle buddle = new Bundle();
   buddle.putString("tab", mTabSpec.get(i).getTag());
   intent.get(i).putExtras(buddle);

   mTabSpec.get(i).setContent(intent.get(i));

   mTabhost.addTab(mTabSpec.get(i));

  }
 }

}



2.TabContent.java

package com.priscilla;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

public class TabContent extends Activity {

 private TextView textView;
 private ImageView imgView;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.tabcontent);

  textView = (TextView) findViewById(R.id.TextView);
  imgView = (ImageView) findViewById(R.id.ImageView);

  Bundle buddle = this.getIntent().getExtras();
  String flag = buddle.getString("tab");

  if ("tab0".equals(flag)) {
   textView.setText(getResources().getString(R.string.andy));
   Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
     R.drawable.andy);
   imgView.setImageBitmap(bitmap);
  }

  if ("tab1".equals(flag)) {
   textView.setText(getResources().getString(R.string.bill));
   Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
     R.drawable.bill);
   imgView.setImageBitmap(bitmap);
  }

  if ("tab2".equals(flag)) {
   textView.setText(getResources().getString(R.string.linux));
   Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
     R.drawable.torvalds);
   imgView.setImageBitmap(bitmap);
  }

 }

}
3.3个layout

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/wcity_normal_bg" >

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

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/con_film_bottom_tab" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
        </FrameLayout>
    </LinearLayout>

</TabHost>



tabwidget.xml

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent" 
 android:orientation="horizontal"
 android:gravity="center" >
 <TextView 
  android:id="@+id/tab_name" 
  android:layout_width="fill_parent" 
  android:layout_height="39dp"
  android:layout_marginLeft="2dp"
  android:layout_marginRight="2dp"
  android:ellipsize="marquee"  
  android:marqueeRepeatLimit="marquee_forever"
  android:singleLine="true"
  android:gravity="center" 
  android:textColor="@drawable/tab_selector"
  android:background="@drawable/tab_bg_selector" />
</LinearLayout>



tabcontent.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/ImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:scaleType="fitXY" />

    <TextView
        android:id="@+id/TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24dip" />

</LinearLayout>



4.2个drawable

tab_bg_selector.xml

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_selected="true" android:drawable="@drawable/con_film_tab_pressed"  />
</selector>



tab_selector.xml

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_selected="false" android:color="#ffffffff"/>
 <item android:state_selected="true" android:color="#ffEEC900"/>
</selector>

5张用到的图
这里写图片描述
andy.jpg

这里写图片描述
bill.jpg

这里写图片描述
torvalds.jpg

这里写图片描述
con_film_bottom_tab.9.png

这里写图片描述
con_film_tab_pressed.9.png

6.colors.xml  string.xml

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="wcity_normal_bg">#ffe5eff4</color>
</resources>

string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, my</string>
    <string name="app_name">myTab</string>
    <string name="andy">Android的创造者: Andy Rubin</string>
    <string name="bill">Java创造者之一: Bill Joy</string>
    <string name="linux">Linux之父: Linus Torvalds</string>
    <string name="tab_name">选项卡%1$s</string>    
</resources>

Android 自定义TabHost

ps:我们平时在项目中经常用到TabHost作为引导页,实现的方法太多了,这里介绍使用比较多的一种吧 两个效果都是通过xml搭建出来的 这里说明底部的搭建过程 ...
  • u011692041
  • u011692041
  • 2016年04月29日 15:34
  • 1586

android上FragmentTabHost实现自定义Tab Indicator

基于android V4的FragmentTabHost实现自定义Tab Indicator, 同时支持手势侧滑切换到不同Tab上。...
  • jia20003
  • jia20003
  • 2015年12月13日 15:05
  • 5086

Android中自定义tabhost的TAB页面被选中时TAB底部的颜色

系统的tabhost的tab底部是蓝色,
  • syc751255354
  • syc751255354
  • 2014年06月27日 12:10
  • 3161

android自定义TabHost扩展控件TabView

最近项目中需要实现TabHost,鉴于TabHost不能实现想要的功能,所以决定自定义一个控件,用于替代TabHost,实现拖拽,Tab之间的替换等功能.刚整合了一份简单的代码,第一次发表文章,写的不...
  • u013598111
  • u013598111
  • 2015年03月15日 11:38
  • 405

【Android】自定义 Tabhost

效果图: MainActivity.javapackage tianshuai.homePage; import android.app.TabActivity; import andro...
  • tianshuai11
  • tianshuai11
  • 2012年03月29日 13:56
  • 1032

Android初级控件TabHost

TabHost我们都知道是用来实现导航栏布局来切换页面的,这个也是元老级的控件了,现在逐渐被TabLayout,BottomNavigationBar,使用RadioButton自定义。。。等等给取代...
  • a_zhon
  • a_zhon
  • 2016年10月10日 13:18
  • 3839

android开发中TabHost使用方法

一、效果图 二、android开发中TabHost使用方法详解  1、定义一个布局文件,将一个RadioGroup放在TabWidget中,然后将TabWidget放在TabHost中,其中TabW...
  • wpwbb510582246
  • wpwbb510582246
  • 2016年10月29日 16:07
  • 778

【Android进阶】嵌套TabHost (TabHost中放TabHost,类似二级目录、二级树)

今天讲一下,如何在TabHost中,再放TabHost。先来看一下效果。一层TabHost两层Tabhost (内部TabHots在上面)两层TabHost (内层TabHots在下面)下面说一下代码...
  • feng88724
  • feng88724
  • 2011年02月23日 19:56
  • 16765

Android——tabHost的使用注意点

1.当我们直接让Activity继承自TabActivty时: 需要在layout布局文件中指定一个TabHost控件的ID 在activity中使用getTabHost()得到tabhost控件对象...
  • a591193965
  • a591193965
  • 2016年05月10日 21:57
  • 1641

TabHost的使用(三):动态添加Tab

package com.example.androidtest; import android.os.Bundle; import android.app.Activity; import andr...
  • wuli2496
  • wuli2496
  • 2014年04月17日 21:20
  • 902
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 自定义Tabhost
举报原因:
原因补充:

(最多只允许输入30个字)