生活随笔
收集整理的這篇文章主要介紹了
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; 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"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TabHost tabHost = this.getTabHost(); final TabWidget tabWidget = tabHost.getTabWidget(); TabHost.TabSpec tabSpec = tabHost.newTabSpec(Tab1); tabSpec.setIndicator(composeLayout("爽哉", R.drawable.coke)) .setContent(R.id.view1); tabHost.addTab(tabSpec); tabHost.addTab(tabHost.newTabSpec(Tab2).setIndicator(composeLayout("安逸", R.drawable.coke)) .setContent(R.id.view2)); tabHost.addTab(tabHost.newTabSpec(Tab3).setIndicator(composeLayout("開心", R.drawable.coke)) .setContent(R.id.view3)); tabHost.addTab(tabHost.newTabSpec(Tab4).setIndicator(composeLayout("說明", R.drawable.coke)) .setContent(R.id.view4)); int width =45; int height =48; for(int i = 0; i < tabWidget.getChildCount(); i++) { 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); } else { v.setBackgroundColor(Color.GRAY); } } tabHost.setOnTabChangedListener(new OnTabChangeListener() { @Override public void onTabChanged(String tabId) { 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); } } } }); } /** * 這個設置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; public class CustomLayout implements TabHost.TabContentFactory{ private Activity myActivity; private LayoutInflater layoutHelper; private LinearLayout layout; public CustomLayout(Activity myActivity) { this.myActivity = myActivity; layoutHelper = myActivity.getLayoutInflater(); } @Override public View createTabContent(String tag) { return addCustomView(tag); } 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.addView(iv, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); } else if(id.equals("Tab2")) { 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标签详细设置的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。