關於Android TabHost切換Tab字型的顏色背景顏色改變

來源:互聯網
上載者:User

[java] 
最近在做一個平板電腦點餐的系統,要用到TabHost,不太好寫,寫好了分享給大家,先片,預設效果: 

最近在做一個平板電腦點餐的系統,要用到TabHost,不太好寫,寫好了分享給大家,先片,預設效果:

 
 

切換後效果

 


先是layout檔案夾中的布局檔案,代碼如下:

<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:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:background="@drawable/category_bg"
        android:padding="0dp" >


        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="wrap_content"
            android:layout_height="40dp"/>


        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/context_bg"
            android:padding="0dp" />
    </LinearLayout>


</TabHost>

 

 

然後是java檔案,


[java] 
package com.dzdc.activity; 
 
 
import android.app.TabActivity; 
import android.content.Intent; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.TabHost; 
import android.widget.TabHost.OnTabChangeListener; 
import android.widget.TextView; 
 
 
import com.dzdc.R; 
 
 
@SuppressWarnings("deprecation") 
public class IndexActivity extends TabActivity { 
    private String[] tabMenu = { "熱菜", "冷菜", "海鮮", "川菜", "酒飲", "招牌菜" }; 
    private Intent intent0, intent1, intent2, intent3, intent4, intent5; 
    private Intent[] intents = { intent0, intent1, intent2, intent3, intent4, 
            intent5 }; 
    private TabHost.TabSpec tabSpec0, tabSpec1, tabSpec2, tabSpec3, tabSpec4, 
            tabSpec5; 
    private TabHost.TabSpec[] tabSpecs = { tabSpec0, tabSpec1, tabSpec2, 
            tabSpec3, tabSpec4, tabSpec5 }; 
 
 
    private TabHost tabHost = null; 
 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉標題列  
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                WindowManager.LayoutParams.FLAG_FULLSCREEN); 
        setContentView(R.layout.index); 
 
 
        tabHost = getTabHost(); 
 
 
        for (int i = 0; i < tabMenu.length; i++) { 
            intents[i] = new Intent(); 
            intents[i].setClass(this, IndexContentActivity.class); 
 
 
            tabSpecs[i] = tabHost.newTabSpec(tabMenu[i]); 
            tabSpecs[i].setIndicator(tabMenu[i]);// 設定文字  
            tabSpecs[i].setContent(intents[i]);// 設定該頁的內容  
 
 
            tabHost.addTab(tabSpecs[i]);// 將該頁的內容添加到Tabhost  
        } 
 
 
        tabHost.setCurrentTabByTag(tabMenu[0]); // 設定第一次開啟時預設顯示的標籤,  
         
        updateTab(tabHost);//初始化Tab的顏色,和字型的顏色  
         
        tabHost.setOnTabChangedListener(new OnTabChangedListener()); // 選擇監聽器  
 
 
    } 
 
 
    class OnTabChangedListener implements OnTabChangeListener { 
 
 
        @Override 
        public void onTabChanged(String tabId) { 
            tabHost.setCurrentTabByTag(tabId); 
            System.out.println("tabid " + tabId); 
            System.out.println("curreny after: " + tabHost.getCurrentTabTag()); 
            updateTab(tabHost); 
        } 
    } 
 
 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
            System.exit(0); 
            return false; 
        } else if (keyCode == KeyEvent.KEYCODE_MENU 
                && event.getRepeatCount() == 0) { 
            return true; // 返回true就不會彈出預設的setting菜單  
        } 
 
 
        return false; 
    } 
     
    /**
     * 更新Tab標籤的顏色,和字型的顏色
     * @param tabHost
     */ 
    private void updateTab(final TabHost tabHost) { 
        for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { 
            View view = tabHost.getTabWidget().getChildAt(i); 
            TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); 
            tv.setTextSize(16); 
            tv.setTypeface(Typeface.SERIF, 2); // 設定字型和風格  
            if (tabHost.getCurrentTab() == i) {//選中  
                view.setBackgroundDrawable(getResources().getDrawable(R.drawable.category_current));//選中後的背景  
                tv.setTextColor(this.getResources().getColorStateList( 
                        android.R.color.black)); 
            } else {//不選中  
                view.setBackgroundDrawable(getResources().getDrawable(R.drawable.category_bg));//非選擇的背景  
                tv.setTextColor(this.getResources().getColorStateList( 
                        android.R.color.white)); 
            } 
        } 
    } 

package com.dzdc.activity;


import android.app.TabActivity;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TextView;


import com.dzdc.R;


@SuppressWarnings("deprecation")
public class IndexActivity extends TabActivity {
 private String[] tabMenu = { "熱菜", "冷菜", "海鮮", "川菜", "酒飲", "招牌菜" };
 private Intent intent0, intent1, intent2, intent3, intent4, intent5;
 private Intent[] intents = { intent0, intent1, intent2, intent3, intent4,
   intent5 };
 private TabHost.TabSpec tabSpec0, tabSpec1, tabSpec2, tabSpec3, tabSpec4,
   tabSpec5;
 private TabHost.TabSpec[] tabSpecs = { tabSpec0, tabSpec1, tabSpec2,
   tabSpec3, tabSpec4, tabSpec5 };


 private TabHost tabHost = null;


 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉標題列
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
  setContentView(R.layout.index);


  tabHost = getTabHost();


  for (int i = 0; i < tabMenu.length; i++) {
   intents[i] = new Intent();
   intents[i].setClass(this, IndexContentActivity.class);


   tabSpecs[i] = tabHost.newTabSpec(tabMenu[i]);
   tabSpecs[i].setIndicator(tabMenu[i]);// 設定文字
   tabSpecs[i].setContent(intents[i]);// 設定該頁的內容


   tabHost.addTab(tabSpecs[i]);// 將該頁的內容添加到Tabhost
  }


  tabHost.setCurrentTabByTag(tabMenu[0]); // 設定第一次開啟時預設顯示的標籤,
  
  updateTab(tabHost);//初始化Tab的顏色,和字型的顏色
  
  tabHost.setOnTabChangedListener(new OnTabChangedListener()); // 選擇監聽器


 }


 class OnTabChangedListener implements OnTabChangeListener {


  @Override
  public void onTabChanged(String tabId) {
   tabHost.setCurrentTabByTag(tabId);
   System.out.println("tabid " + tabId);
   System.out.println("curreny after: " + tabHost.getCurrentTabTag());
   updateTab(tabHost);
  }
 }


 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
   System.exit(0);
   return false;
  } else if (keyCode == KeyEvent.KEYCODE_MENU
    && event.getRepeatCount() == 0) {
   return true; // 返回true就不會彈出預設的setting菜單
  }


  return false;
 }
 
 /**
     * 更新Tab標籤的顏色,和字型的顏色
     * @param tabHost
     */
    private void updateTab(final TabHost tabHost) {
        for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
            View view = tabHost.getTabWidget().getChildAt(i);
            TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
    tv.setTextSize(16);
    tv.setTypeface(Typeface.SERIF, 2); // 設定字型和風格
            if (tabHost.getCurrentTab() == i) {//選中
                view.setBackgroundDrawable(getResources().getDrawable(R.drawable.category_current));//選中後的背景
                tv.setTextColor(this.getResources().getColorStateList(
          android.R.color.black));
            } else {//不選中
                view.setBackgroundDrawable(getResources().getDrawable(R.drawable.category_bg));//非選擇的背景
                tv.setTextColor(this.getResources().getColorStateList(
          android.R.color.white));
            }
        }
    }
}


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.