日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TabActivity中的Tab标签详细设置

發布時間:2024/6/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TabActivity中的Tab标签详细设置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考鏈接:

http://www.iteye.com/topic/602737

這個寫的很不錯,我是跟著一步步寫下來的,不過到最后也遇到了麻煩,就是不能將Tab標簽的文字和圖片分開,始終是重合的,而且每個具體的代碼,還是搞了許久才出來,故而分享之,希望能給大家帶來方便,也謝謝下面的高人,呵呵!

http://www.youmi.net/bbs/thread-102-1-4.html

這個和上面的代碼是一樣的,不過代碼不全,對于初學者來說,考驗的時候來了,完善就是提高的過程,不要怕麻煩!

下面就根據上面的參考自己寫的,當然大部分是相同的,不過有詳細的注釋,完整的代碼

如果有什么不明白就留言吧!呵呵

首先結果圖:

圖1:

圖2:



圖3:


當然界面沒有前面的仁兄好看,我是講究實用,美化需要自己慢慢做了

呵呵

下面直接代碼:

Java代碼
  • package com.woclub.tabactivitytest;
  • import android.app.TabActivity;
  • import android.content.res.ColorStateList;
  • import android.graphics.Color;
  • import android.os.Bundle;
  • import android.util.Log;
  • import android.view.Gravity;
  • import android.view.View;
  • import android.widget.ImageView;
  • import android.widget.LinearLayout;
  • import android.widget.TabHost;
  • import android.widget.TabWidget;
  • import android.widget.TextView;
  • import android.widget.TabHost.OnTabChangeListener;
  • /**
  • * 總結:在設置Tab的布局的時候首先需要newTabSpec再在其設置setIndicator(Tab名字,Tab的圖標),
  • * 尤其需要注意setContent(),它有三種使用方法setContent(int)它是直接在布局文件中設置其布局,
  • * setContent(Intent)可以用Intent指定一個Activity,
  • * setContent(TabContentFactory)可以用一個類來指定其布局的方式
  • * @author Administrator
  • *
  • */
  • public class MainActivity extends TabActivity {
  • private static final String Tab1 = "Tab1";
  • private static final String Tab2 = "Tab2";
  • private static final String Tab3 = "Tab3";
  • private static final String Tab4 = "Tab4";
  • /** Called when the activity is first created. */
  • @Override
  • public void onCreate(Bundle savedInstanceState) {
  • super.onCreate(savedInstanceState);
  • setContentView(R.layout.main);
  • //1得到TabHost對象,正對TabActivity的操作通常都有這個對象完成
  • final TabHost tabHost = this.getTabHost();
  • final TabWidget tabWidget = tabHost.getTabWidget();
  • //2生成一個Intent對象,該對象指向一個Activity,當然現在例子比較簡單就沒有綁定其他的Activity故而不用
  • //3生成一個TabSpec對象,這個對象代表了一個Tab頁
  • TabHost.TabSpec tabSpec = tabHost.newTabSpec(Tab1);
  • //設置該頁的indicator(指示器)設置該Tab頁的名字和圖標,以及布局
  • tabSpec.setIndicator(composeLayout("爽哉", R.drawable.coke))
  • .setContent(R.id.view1);
  • //4將設置好的TabSpec對象添加到TabHost當中
  • tabHost.addTab(tabSpec);
  • //第二個Tab
  • tabHost.addTab(tabHost.newTabSpec(Tab2).setIndicator(composeLayout("安逸", R.drawable.coke))
  • .setContent(R.id.view2));
  • //第三個Tab
  • tabHost.addTab(tabHost.newTabSpec(Tab3).setIndicator(composeLayout("開心", R.drawable.coke))
  • .setContent(R.id.view3));
  • //第四個Tab
  • tabHost.addTab(tabHost.newTabSpec(Tab4).setIndicator(composeLayout("說明", R.drawable.coke))
  • .setContent(R.id.view4));
  • //setContent(TabContentFactory)可以用一個類來指定其布局的方式,前三個都是用的setContent(int)方式
  • // CustomLayout custom = new CustomLayout(this);
  • // tabHost.addTab(tabHost.newTabSpec(Tab4).setIndicator("Tab4", getResources()
  • // .getDrawable(R.drawable.icon))
  • // .setContent(custom));
  • //*****************************這是對Tab標簽本身的設置*******************************************
  • int width =45;
  • int height =48;
  • for(int i = 0; i < tabWidget.getChildCount(); i++)
  • {
  • //設置高度、寬度,不過寬度由于設置為fill_parent,在此對它沒效果
  • tabWidget.getChildAt(i).getLayoutParams().height = height;
  • tabWidget.getChildAt(i).getLayoutParams().width = width;
  • /**
  • * 下面是設置Tab的背景,可以是顏色,背景圖片等
  • */
  • View v = tabWidget.getChildAt(i);
  • if (tabHost.getCurrentTab() == i) {
  • v.setBackgroundColor(Color.GREEN);
  • //在這里最好自己設置一個圖片作為背景更好
  • //v.setBackgroundDrawable(getResources().getDrawable(R.drawable.chat));
  • } else {
  • v.setBackgroundColor(Color.GRAY);
  • }
  • }
  • //************************************************************************************
  • //設置Tab變換時的監聽事件
  • tabHost.setOnTabChangedListener(new OnTabChangeListener() {
  • @Override
  • public void onTabChanged(String tabId) {
  • // TODO Auto-generated method stub
  • //當點擊tab選項卡的時候,更改當前的背景
  • for(int i = 0; i < tabWidget.getChildCount(); i++)
  • {
  • View v = tabWidget.getChildAt(i);
  • if (tabHost.getCurrentTab() == i) {
  • v.setBackgroundColor(Color.GREEN);
  • } else {
  • //這里最后需要和上面的設置保持一致,也可以用圖片作為背景最好
  • v.setBackgroundColor(Color.GRAY);
  • }
  • }
  • }
  • });
  • }
  • //#################################################################這是設置TabWidget的布局
  • /**
  • * 這個設置Tab標簽本身的布局,需要TextView和ImageView不能重合
  • * s:是文本顯示的內容
  • * i:是ImageView的圖片位置
  • * 將它設置到setIndicator(composeLayout("開心", R.drawable.coke))中
  • */
  • public View composeLayout(String s, int i){
  • Log.e("Error", "composeLayout");
  • LinearLayout layout = new LinearLayout(this);
  • layout.setOrientation(LinearLayout.VERTICAL);
  • TextView tv = new TextView(this);
  • tv.setGravity(Gravity.CENTER);
  • tv.setSingleLine(true);
  • tv.setText(s);
  • tv.setTextColor(Color.RED);
  • layout.addView(tv,
  • new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
  • ImageView iv = new ImageView(this);
  • iv.setImageResource(i);
  • layout.addView(iv,
  • new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
  • return layout;
  • }
  • //#################################################################
  • }

  • 我都有詳細的注釋,估計大家都能看懂的,有些地方給了提示,擴展的需要就需要自己去完成了

    下面是一個兩個布局文件

    一個是在layout中設置:

    Java代碼
  • <?xml version="1.0" encoding="utf-8"?>
  • <!--
  • 一個典型的標簽Activity 是由2 部分構成的 且其id都有規定 即:
  • * TabWidget 用于展示標簽頁 id=tabs
  • * FrameLayout 用于展示隸屬于各個標簽的具體布局 id=tabconten
  • * TabHost 用于整個Tab布局 id=TabHost
  • 還需注意要將Tab顯示在最下面就需要這只LinearLayout時用Bottom
  • -->
  • <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:gravity="bottom"
  • android:layout_width="fill_parent"
  • android:layout_height="fill_parent">
  • <FrameLayout
  • android:id="@android:id/tabcontent"
  • android:layout_width="fill_parent"
  • android:layout_height="200dip" >
  • <RelativeLayout
  • android:id="@+id/view1"
  • android:orientation="vertical"
  • android:layout_width="fill_parent"
  • android:layout_height="fill_parent">
  • <TextView
  • android:id="@+id/text1"
  • android:layout_width="wrap_content"
  • android:layout_height="wrap_content"
  • android:text="需要光臨第一個Tab"/>
  • <ImageView
  • android:id="@+id/image1"
  • android:layout_height="wrap_content"
  • android:layout_below="@id/text1"
  • android:layout_width="wrap_content"
  • android:src="@drawable/icon"
  • />
  • </RelativeLayout>
  • <TextView
  • android:id="@+id/view2"
  • android:layout_width="fill_parent"
  • android:layout_height="fill_parent"
  • android:text="需要光臨第二個Tab"/>
  • <TextView
  • android:id="@+id/view3"
  • android:layout_width="fill_parent"
  • android:layout_height="fill_parent"
  • android:text="需要光臨第三個Tab"/>
  • <TextView
  • android:id="@+id/view4"
  • android:layout_width="fill_parent"
  • android:layout_height="fill_parent"
  • />
  • </FrameLayout>
  • <TabWidget
  • android:id="@android:id/tabs"
  • android:layout_width="fill_parent"
  • android:layout_height="wrap_content">
  • </TabWidget>
  • </LinearLayout>
  • </TabHost>
  • 還有一個在類中設置,設置都差不多,在此類中設置只是針對每個Tab頁面的設置

    Java代碼
  • package com.woclub.tabactivitytest;
  • import android.app.Activity;
  • import android.view.Gravity;
  • import android.view.LayoutInflater;
  • import android.view.View;
  • import android.widget.Button;
  • import android.widget.EditText;
  • import android.widget.ImageView;
  • import android.widget.LinearLayout;
  • import android.widget.RadioButton;
  • import android.widget.RadioGroup;
  • import android.widget.TabHost;
  • import android.widget.TextView;
  • /**
  • * 此類的功能是設置每個Tab標簽的布局方式
  • * 使用方法
  • * CustomLayout ct = new CustomLayout(this);
  • * tHost.addTab(tHost.newTabSpec(Tab4).setIndicator("Tab 4").setContent(ct));
  • * @author Administrator
  • *
  • */
  • public class CustomLayout implements TabHost.TabContentFactory{
  • private Activity myActivity;
  • private LayoutInflater layoutHelper;//用于實例化布局
  • private LinearLayout layout;
  • //構造函數,從外面傳遞參數Activity
  • public CustomLayout(Activity myActivity)
  • {
  • this.myActivity = myActivity;
  • //通過getLayoutInflater從Activity中得到一個實例化的LayoutInflater
  • layoutHelper = myActivity.getLayoutInflater();
  • }
  • /**
  • * 根據不同的Tab創建不同的視圖
  • */
  • @Override
  • public View createTabContent(String tag) {
  • // TODO Auto-generated method stub
  • return addCustomView(tag);
  • }
  • /**
  • * 根據Tab的id設置不同Tab的view
  • * 這是普通的設置方式,設置每個Tab的布局
  • * @param id
  • * @return
  • */
  • private View addCustomView(String id)
  • {
  • layout = new LinearLayout(myActivity);
  • layout.setOrientation(LinearLayout.HORIZONTAL);
  • if(id.equals("Tab1"))
  • {
  • ImageView iv = new ImageView(myActivity);
  • iv.setImageResource(R.drawable.chat);
  • //設置layout的布局,將一個ImageView添加到其中,并設置ImageView的布局格式,addView的第二個參數是設置ImageView的width和Height
  • layout.addView(iv, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
  • }
  • else if(id.equals("Tab2"))
  • {
  • //第一個控件,注意每添加一個空間都需要用addView添加到layout中
  • EditText edit = new EditText(myActivity);
  • layout.addView(edit, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
  • //第二個控件
  • Button button = new Button(myActivity);
  • button.setText("確定");
  • button.setWidth(100);
  • layout.addView(button, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
  • //第三個控件
  • RadioGroup rGroup = new RadioGroup(myActivity);
  • rGroup.setOrientation(LinearLayout.HORIZONTAL);
  • RadioButton radio1 = new RadioButton(myActivity);
  • radio1.setText("Radio A");
  • rGroup.addView(radio1);
  • RadioButton radio2 = new RadioButton(myActivity);
  • radio2.setText("Radio B");
  • rGroup.addView(radio2);
  • layout.addView(rGroup,
  • new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
  • }
  • else if(id.equals("Tab3"))
  • {
  • TextView text = new TextView(myActivity);
  • text.setText("the third TextView");
  • text.setGravity(Gravity.CENTER);
  • layout.addView(text);
  • }
  • else if(id.equals("Tab4"))
  • {
  • LinearLayout.LayoutParams param3 =
  • new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
  • //在這里面又引用了布局文件來設置控件
  • layout.addView(layoutHelper.inflate(R.layout.hello, null),param3);
  • }
  • return layout;
  • }
  • }
  • 好了,該說的都在代碼中說明了

    希望大家喜歡,做的粗糙,就由大家去改進吧!

    呵呵!

    歡迎大家的討論


    轉:http://hao3100590.iteye.com/blog/974343

    轉載于:https://www.cnblogs.com/yangkai-cn/p/4016834.html

    總結

    以上是生活随笔為你收集整理的TabActivity中的Tab标签详细设置的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。