actionbar+tabhost菜单栏实现


package com.example.actionbar2;



import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


@SuppressLint("NewApi")
public class ActionBarActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabhost);


// 1.获取实例化actionbar组件
ActionBar actionBar = super.getActionBar();


// 2.设置actionbar通过标题栏现实选项卡样式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);


// 3.新建选项卡,并且加载每一个选项卡的布局
Tab tab_one = actionBar.newTab().setText("menu1");
Tab tab_two = actionBar.newTab().setText("menu2");
Tab tab_three = actionBar.newTab().setText("menu3");


// -------------------------------------------------------------------------
// 切换选项卡的时候,必须加载一个界面出来,响应选项卡的点击事件,这里完成得二步,这里得添加监听器
// 监听器的添加必须在新增选项卡和添加选项卡之间,不然就出错
// 一.添加点击监听器,允许点击选项卡
tab_one.setTabListener(new MyTabListener(new MyFragment(
R.layout.activity_main)));
tab_two.setTabListener(new MyTabListener(new MyFragment(
R.layout.mylayout)));
tab_three.setTabListener(new MyTabListener(new MyFragment(
R.layout.activity_main)));

//扩展:Fragment生命周期和activity一致,同样有相同的方法,这里通过getView()方法取得我们的view,得到VIew我们就能操纵
//view里面的组件,同时当我们需要有监听器的时候,也是在Fragment中找到组件,添加相应的监听器,记住:这里监听器添加是在Fragment里面
//而不是tabhost里面
View view_Layout = new MyFragment(R.layout.activity_main).getView();


// 二.选项卡界面必须使用Fragment实现,Fragment:碎片,Fragment提供一块视图区域,允许响应用户
// 所有事件处理,Fragment对象会和activity生命周期一致。


// -------------------------------------------------------------------------
actionBar.addTab(tab_one);
actionBar.addTab(tab_two);
actionBar.addTab(tab_three);


}
}


class MyTabListener implements TabListener {


Fragment myFragment = null;


// 导入每个选项卡的布局试图
public MyTabListener(Fragment myFragment) {
this.myFragment = myFragment;
}


/**
* 这是第一次点击选择了其中一个选项卡
*/
// FragmentTransaction:用于加载我们选项卡视图的工具,加载当前选项卡布局
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.myactivity_layout, this.myFragment, null);
}


/**
* 这是第二次选择同一个选项卡
*/
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.myactivity_layout, this.myFragment, null);
// 可能的第二种情况,当前的发生了改变,替换原有的视图,ft.replace();
}


/**
* 这是不选择,相当于离开当前选项卡,选择其余选项卡
*/
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(myFragment);
}


}


class MyFragment extends Fragment {
/**
* MyFragment:生命周期和activity的生命周期是一致的,activity实例化后立刻就会实例化Fragment
*/


int modify_layout = 0;


public MyFragment(int modify_layout) {
super();
this.modify_layout = modify_layout;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myLayout = inflater.inflate(this.modify_layout, null);
return myLayout;
}


@Override
public View getView() {
return super.getView();
}


@Override
public void onStop() {
super.onStop();
}


@Override
public void onDestroyView() {
super.onDestroyView();
}


}


// 这来放布局文件进来,这个是actionbar的选项卡的玩法


<?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="match_parent"
    android:layout_height="match_parent" >


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >


        <FrameLayout
            android:id="@+id/myactivity_layout"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />


        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0" />


        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />
    </LinearLayout>


</TabHost>






// <?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="match_parent"
// android:layout_height="match_parent" >
//
// <LinearLayout
// android:layout_width="match_parent"
// android:layout_height="match_parent"
// android:orientation="vertical" >
//
// <FrameLayout
// android:id="@+id/myactivity_layout"
// android:layout_width="match_parent"
// android:layout_height="0dp"
// android:layout_weight="1" />
//
// <TabWidget
// android:id="@android:id/tabs"
// android:layout_width="match_parent"
// android:layout_height="wrap_content"
// android:layout_weight="0" />
//
// <FrameLayout
// android:id="@android:id/tabcontent"
// android:layout_width="0dp"
// android:layout_height="0dp"
// android:layout_weight="0" />
//
// </LinearLayout>
//
// </TabHost>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值