(android實戰)自訂android的tab樣式–轉載

來源:互聯網
上載者:User

android項目中碰到需要替換tabHost預設樣式的情況,需要達到的效果:

(實現原理,重構Tab的Indicator)

為了做成這樣的效果,花了些時間,這裡做個筆記,給有需要的朋友。

步驟一:建立一個xml布局檔案,命名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/white">
  <LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <TabWidget android:id="@android:id/tabs"
      android:layout_width="fill_parent" android:layout_height="wrap_content"
      android:gravity="center_horizontal|center_vertical"/>
    <FrameLayout android:id="@android:id/tabcontent"
      android:layout_width="fill_parent" android:layout_height="fill_parent">
    </FrameLayout>
  </LinearLayout>
</TabHost>


步驟二:在Activity中添加我們的tab

代碼如下

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  mTabHost = getTabHost();
       
  Intent intent1 = new Intent(this,OfficialActivity.class);
  createTab("公開的聊天室",intent1);
       
  Intent intent2 = new Intent(this, NearByActivity.class);
  createTab("周邊",intent2);
       
  Intent intent3= new Intent(this, HistoryActivity.class);
  createTab("曆史",intent3);
       
  mTabHost.setCurrentTab(1);
}

 private
void createTab(String text ,Intent intent){         
mTabHost.addTab(mTabHost.newTabSpec(text).setIndicator(createTabView(text)).setContent(intent));
    }

    private View createTabView(String text) {
            View view = LayoutInflater.from(this).inflate(R.layout.tab_indicator, null);
            TextView tv = (TextView) view.findViewById(R.id.tv_tab);
            tv.setText(text);
            return view;
    }


步驟三:在createTabView方法中,我們載入了布局檔案tab_indicator.xml,改布局很簡單,就是放置一個帶背景的布局,在布局中放一個textView用於顯示tab標題,以下為該布局檔案內容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_height="fill_parent" android:layout_width="fill_parent"
  android:orientation="vertical" android:gravity="center"
  android:theme="@android:style/Theme.NoTitleBar" android:background="@drawable/chat_tab_selector">
  <TextView android:id="@+id/tv_tab" android:layout_width="wrap_content" android:layout_height="wrap_content"
  android:text="tab1" android:textColor="@color/white"/>
</LinearLayout>


步驟四:在上面的布局檔案中我們把該布局的背景定義為chat_tab_selector,這裡同樣需要在drawable檔案夾下建立chat_tab_selector.xml,內容很簡單,就是做一個按下時的背景切換,內容如下:

<?xml version="1.0" encoding="utf-8"?>
        <selector xmlns:android = "http://schemas.android.com/apk/res/android">    
        <item    
        android:state_focused = "true"    
        android:drawable = "@drawable/topbar_bg_down"    
        />
        <item    
        android:state_selected = "true"    
        android:drawable = "@drawable/topbar_bg_down"    
        />
        <item    
        android:state_pressed = "true"    
        android:drawable = "@drawable/topbar_bg_down"    
        />    
        <item android:drawable = "@drawable/topbar_background" />    
        </selector>    


裡面做了兩張圖進行狀態切換,這兩張圖同樣放drawable下就可以了

至此,自訂tab的步驟就完成了。如果要做成更複雜的樣式,大家可以在此基礎上進行擴充。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.