android tabhost Intent實現

0x0 前言

幫同學幹活,於是就用到了tabhost ,然後今天學習了一天, 收穫了很多東西, 也被坑 了好多次。所以今天主要講一下tabhost和intent 一起的實現。

0x1 沒代碼說個xx

在說代碼前我覺得我還是先貼張圖吧,我看了N個CSDN博客還有其他雜七雜八的東西,給我第一感受還是先給個圖看看吧。。。
tabs
這裏我也簡化了, 所有tab頁面都只加了一個TextView ,實際上完全可以做成一個獨立的activity的樣子((╯’ - ‘)╯( ┻━┻) 本來就是個activity 好不好)。 然後在上兩張目錄圖吧
目錄
目錄
這裏說明一下, 一個是 java包下的activity, 一個是res/layout下的xml佈局文件,這裏我們總共要實現四個tab頁面,所以請準備好4個activity +1個 TabActivity , 還有4個activity 對應的佈局文件和Tabactivity。

0x2 上代碼

    <?xml version="1.0" encoding="utf-8"?>

    <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@android:id/tabhost">

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">
            <TabWidget
                android:layout_alignParentBottom="true"
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content">
            </TabWidget>

            <FrameLayout
                android:layout_above="@android:id/tabs
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:padding="5dp"
                android:layout_height="fill_parent">
            </FrameLayout>
        </RelativeLayout>
    </TabHost>

這個地方最要在意的是佈局的位置, 大多說的應用都喜歡在底部放tab按鈕, 所以這裏這麼寫就夠了。 有的人用LinearLayout , 也可以,具體的我這裏就不展開了,因爲類似的博文csdn上太多了,今天一天我就翻了n個, 其實一開始我的按鈕也是在top,但是我的AS裏明明顯示的是在底部啊, 難道as抽了,(╯`□′)╯”“┻━┻☆))>○<) 。 還有這裏裏面不需要加任何元素 , 在我看的幾乎所有博客中, 這裏都加了東西, 不是說不可以,只是我喜歡怎麼簡單怎麼來。
上面就是main.xml了。 剩下幾個xml自己實現就好, 懶的話像我一樣放個TextView 。

好接下來是最主要的java代碼

package cn.edu.hdu.amanager;


import android.app.LocalActivityManager;
import android.app.TabActivity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;

import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.TabHost;

import cn.edu.hdu.People.Person;

public class AMain extends TabActivity  {

    final  String TAG = "AMain+++++++++++++++" ;

    private Intent  personmsg ;
    private Intent  reactivity ;
    private Intent  pushnotify ;
    private Intent  calendar ;
    private TabHost tbhost ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //注意點1 
        setContentView(R.layout.main);
        tbhost=getTabHost();
        //LayoutInflater.from(this).inflate(R.layout.main, tbhost.getTabContentView(), true);
        calendar = new Intent(this,calendar.class) ;
        personmsg = new Intent(this , PersonMsg.class) ;
 //注意點2
        tbhost.addTab(tbhost.newTabSpec("tab1").setIndicator("calendar66", null)
                .setContent(calendar));

        tbhost.addTab(tbhost.newTabSpec("tab2").setIndicator("Person666", null)
                .setContent(personmsg));
        reactivity= new Intent(this,Reactivity.class) ;
        tbhost.addTab(tbhost.newTabSpec("tab2").setIndicator("Person666",null)
                .setContent(reactivity));
        pushnotify = new Intent(this ,Pushnotify.class) ;
        tbhost.addTab(tbhost.newTabSpec("tab2").setIndicator("Person666",null)
                .setContent(pushnotify));
        tbhost.setCurrentTab(0);

        tbhost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
            @Override
            public void onTabChanged(String tabId) {


            }

        });
}
}

上面的兩個注意點
注意點1 我這裏是繼承了 TabActivity, 所以只要gettabHost() 就好, 如果繼承Activity ,需要使用setup() ,但是AS自己報錯了,比較無語。 其實是setContentView 和 LayoutInflater , 從我看的博客裏, 有的用前者, 有的用或者, 還有兩個都用的,但是好像在LayoutInflater下 setContentView 是沒有用的, 具體的試了一下, app崩了。 然後就是,單個使用的時候, 用setContentView ,界面就像最開始的那一張 , 但是我用後者, 按鈕又跑到top去了, 上圖
top

具體的我也不清楚是怎麼回事,也許以後會懂。 第一次寫這裏會比較糾結,但是自己試一下就ok了。
- 第二點 就是 使用Intent , 然後用tb 進行綁定, 這裏要將intent 放到 setContent 裏。 後面null的地方是用來放圖片的,因爲暫時我還沒拿到圖,所以null了,
後面就是設置了一個監聽, 沒什麼好講的。

0x3 總結+吐槽

1首先 吐槽一下AS, 自動生成了一個TabHost , 但是Id 爲什麼設置成了tabHost ,運行一下報錯了, 仔細查了一下才發現是系統沒有把tabHost 寫成tabhost , 害的我找了半天的bug. 所以自己一定要看清楚 那幾個特定的id 對不對。
2 從上面的代碼來看, tabActivity上的東西就相對來說比較少了, 而且也很清晰, 之前看的RadioButton,我是在看不下去了,太亂了,當然他也有他的好處。只是我喜歡簡單,而且你會發現你要處理的東西只要到對應的類裏去處理就ok了,等項目大了, 這種佈局的 優勢就會體現出來了。
今天看到了一個水平滑行的佈局, 好像HorizontaScrollView, 感覺可以試一下那個,大概就是下面tab, 上面再用這個容器。 然後還有一個ViewPage+FrameLayout 的吧, 感覺那個更加適合現在app, 所以大家有空可以去學下,如果可能我會發一篇這個的文章。
end暫時想到就這些, 以後再補充吧。代碼暫時還不能共享, 如果有需要,可以在文章下評論,留郵箱,我看到就發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章