小楊的Android學習之旅(2)——模擬百度貼吧底部導航欄

   晚上沒啥事作,朋友過生日喝了點酒,就不許備敲代碼了,在以前在網上找了一個底部導航欄的demo,下午就作了一下,實現的方法比較簡單,也很容易理解,是用TabActivity和TabHost作的。
java

  不過好像在Android4.0之後放棄了TabActivity 改用 FragmentActivity,對於Fragment和 FragmentActivity我不是很懂,等我下來學懂了,再結合網上的例子寫一個demo。
  好吧,廢話就不說了,咱們上代碼,照舊先來佈局文件。 

這就是底部TabHost的主佈局文件
android

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" app

    xmlns:tools="http://schemas.android.com/tools" ide

    android:id="@android :id/tabhost" 佈局

    android:layout_width="fill_parent" ui

    android:layout_height="fill_parent" > this


    <LinearLayout spa

        android:layout_width="fill_parent" .net

        android:layout_height="fill_parent" orm

android:orientation="vertical">


      <FrameLayout

            android:id="@android :id/tabcontent"

            android:layout_width="fill_parent"

            android:layout_height="0.0dip"

            android:layout_weight="1.0" />


        <TabWidget

            android:id="@android :id/tabs"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:layout_weight="0.0"

            android:visibility="gone" />

        

          <FrameLayout

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:layout_gravity="bottom"

            android:layout_marginTop="-10.0dip"

            android:background="@drawable/bg_group_information_image"

            android:paddingLeft="7.0dip"

            android:paddingRight="7.0dip" >


            <RadioGroup

                android:id="@+id/main_radio"

                android:layout_width="fill_parent"

                android:layout_height="wrap_content"

                android:gravity="center_vertical"

                android:orientation="horizontal" >


                <RadioButton

                    android:id="@+id/radio_home"

                    style="@style/main_tab_bottom"

                    android:drawableTop="@drawable/home_selector"

                    android:text="首頁" />


                <RadioButton

                    android:id="@+id/radio_jinba"

                    style="@style/main_tab_bottom"

                    android:drawableTop="@drawable/jinba_selector"

                    android:text="進吧" />


                <RadioButton

                    android:id="@+id/radio_person_info"

                    style="@style/main_tab_bottom"

                    android:drawableTop="@drawable/individual_selector"

                    android:text="我的" />
 

            </RadioGroup>

        </FrameLayout>

    </LinearLayout>


</TabHost>  

接下來就是按鈕的style

 <style name="main_tab_bottom">

        <item name="android:textSize">9.0sp</item>

        <item name="android:textColor">#FFF</item>

        <item name="android:gravity">center_horizontal</item>

        <item name="android:paddingTop">3.0dip</item>

        <item name="android:paddingBottom">1.0dip</item>

        <item name="android:layout_width">wrap_content</item>

        <item name="android:layout_height">wrap_content</item>

        <item name="android:layout_marginTop">2.0dip</item>

        <item name="android:layout_marginBottom">1.0dip</item>

        <item name="android:button">@null</item>

        <item name="android:singleLine">true</item>

        <item name="android:drawablePadding">3.0dip</item>

        <item name="android:layout_weight">1.0</item>

    </style>  

這個很好理解,相信你們一看就會明白,爲何這麼寫,就是由於全部的按鈕都是一個佈局,寫一個總比寫一大堆好吧,這就是style的好處
剩下的就是activity的java代碼 

package com.example.myalarmclock;




import android.app.TabActivity;

import android.content.Intent;

import android.os.Bundle;

import android.widget.CompoundButton;

import android.widget.CompoundButton.OnCheckedChangeListener;

import android.widget.RadioButton;

import android.widget.TabHost;


public class MainActivity extends TabActivity implements

OnCheckedChangeListener {

//定義單選按鈕

private RadioButton person, jinba, home;

// 定義Intent對象

private Intent mHomeIntent, mJinbaIntent, mPersonIntent;


// 定義TabHost對象

private TabHost mTabHost;


// 定義Tab選項卡標示符

private static final String HOME_TAB = "home_tab";

private static final String JINBA_TAB = "jinba_tab";

private static final String PERSON_TAB = "person_tab";


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

initData();

}

/**

* 初始化組件

*/

private void initView(){

//獲得TabHost

mTabHost = getTabHost();

//獲得Intent對象


mHomeIntent = new Intent(this, HomeActivity.class);

mJinbaIntent = new Intent(this, JinbaActivity.class);

mPersonIntent = new Intent(this, PersonActivity.class);

//獲得單選按鈕對象

home = (RadioButton) findViewById(R.id.radio_home);

person = (RadioButton) findViewById(R.id.radio_person_info);

jinba = (RadioButton) findViewById(R.id.radio_jinba);

}

/**

* 初始化數據

*/

private void initData(){

//給單選按鈕設置監聽

home.setOnCheckedChangeListener(this);

person.setOnCheckedChangeListener(this);

jinba.setOnCheckedChangeListener(this);

//添加進Tab選項卡

mTabHost.addTab(buildTabSpec(HOME_TAB, mHomeIntent));

mTabHost.addTab(buildTabSpec(JINBA_TAB, mJinbaIntent));

mTabHost.addTab(buildTabSpec(PERSON_TAB, mPersonIntent));

//設置當前默認的Tab選項卡頁面

home.setChecked(true);

mTabHost.setCurrentTabByTag(HOME_TAB);

}


private TabHost.TabSpec buildTabSpec(String tag, Intent intent) {

TabHost.TabSpec tabSpec = mTabHost.newTabSpec(tag);

tabSpec.setContent(intent).setIndicator("");

return tabSpec;

}

/**

* Tab按鈕選中監聽事件

*/

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

if (isChecked) {

switch (buttonView.getId()) {

case R.id.radio_home:

mTabHost.setCurrentTabByTag(HOME_TAB);

break;

case R.id.radio_jinba:

mTabHost.setCurrentTabByTag(JINBA_TAB);

break;

case R.id.radio_person_info:

mTabHost.setCurrentTabByTag(PERSON_TAB);

break;

}

}

}


}


不難吧,我都以爲沒什麼要說。
而後在去寫你定義好的avtivity吧,每一個activity都在intent裏定義好了,你也能夠本身修改本身的radiobutton

接下來就看看截圖
 

 
圖片

圖片

圖片

能夠吧,我公佈一下源碼,須要的同窗能夠看看。

http://115.com/lb/5lbdaatj91iw#

BaiduDemo.rar 

115網盤禮包碼:5lbdaatj91iw

相關文章
相關標籤/搜索