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

  • 2014年05月06日 14:26
  • 1.73MB
  • 下载

android--自定义TabHost

  • 2013年10月18日 20:43
  • 1.84MB
  • 下载

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

系统的tabhost的tab底部是蓝色,

android自定义TabHost

  • 2013年02月25日 11:47
  • 1.32MB
  • 下载

Android基础——TabHost使用(自定义按钮菜单)

TabHost 使用,自定义TabItem 样式

Android开发之自定义TabHost文字及背景(源代码分享)

使用TabHost 可以在一个屏幕间进行不同版面的切换,而系统自带的tabhost界面较为朴素,我们应该如何进行自定义修改优化呢...

【android开发】自定义TabHost

很多情况下,我们需要用到标签,类似于微末下面的标签效果,直接使用系统默认的往往不能满足项目的需求,就需要我们自定义一个TabHost。下面我把在项目的实现的效果分享给大家,希望能帮助需要的朋友!先上图...

13-6-3 android 自定义tabhost在底部与框架函数的讲解1

对于2.3系统来说tabhost还是比较常用的一种viewGroup,但是android SDK自带的都是在上面切换显示的tabhost,我的文章呢,是将其定义在底下。 上个图,不上图没有说服力。 ...

android--解决方案--自定义tabhost(动态添加选项+带自动水平滑动选项卡+手势切换选项卡及内容功能)

本文主要解决自定义tabhost的实现,以及集成通过代码动态添加选项卡功能、选项卡水平自动滑动功能、以及通过手势来切换选项卡功能。 下面跟我一起来完成这个完美的解决方案: 1、定义tabwidget选...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 自定义Tabhost
举报原因:
原因补充:

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