Android之Actionbar顶部标签的使用
今天写了个示例代码,就是使用Actionbar类实现顶部标签切换功能。如果所示。
使用最新的adt工具,创建项目的时候都会带一个android-support-v7-appcompat的类库项目,
这个libproject中有我们要用的ActionBar,可以适配2.1的Android系统。
废话不多说,直接上代码。
1、修改activity_main.xml,增加ViewPager。
1
2
3
4
5
|
< android.support.v4.view.ViewPager xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:id = "@+id/pager"
android:layout_width = "match_parent"
android:layout_height = "match_parent" />
|
2、修改MainActivity中的代码,让其继承ActionBarActivity
1
|
public class MainActivity extends ActionBarActivity implements TabListener {
|
3、创建TabsPagerAdapter继承FragmentPagerAdapter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package com.example.tabswithswie.adatper;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.example.tabswithswie.fragments.AppFragment;
import com.example.tabswithswie.fragments.GamesFragment;
import com.example.tabswithswie.fragments.MoviesFragment;
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super (fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem( int index) {
switch (index) {
case 0 :
return new AppFragment();
case 1 :
return new GamesFragment();
case 2 :
return new MoviesFragment();
}
return null ;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3 ;
}
} |
4、创建AppFragment继承android.support.v4.app.Fragment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package com.example.tabswithswie.fragments;
import com.example.tabswithswie.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class AppFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_app, container, false );
}
} |
5、创建布局文件fragment_app.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "#43ff00ff" >
< TextView
android:id = "@+id/textView1"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" android:layout_centerInParent = "true"
android:text = "这个是应用界面"
android:textAppearance = "?android:attr/textAppearanceLarge" />
</ RelativeLayout >
|
6、创建GamesFragment继承android.support.v4.app.Fragment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package com.example.tabswithswie.fragments;
import com.example.tabswithswie.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class GamesFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_game, container, false );
}
} |
7、创建布局文件fragment_game.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "match_parent" android:background = "#9445f353" >
< TextView
android:id = "@+id/textView1"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" android:layout_centerInParent = "true"
android:text = "游戏"
android:textAppearance = "?android:attr/textAppearanceLarge" />
</ RelativeLayout >
|
8、创建MoviesFragment继承android.support.v4.app.Fragment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package com.example.tabswithswie.fragments;
import com.example.tabswithswie.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MoviesFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_movie, container, false );
}
} |
9、创建布局文件fragment_movie.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "#34fef443" >
< TextView
android:id = "@+id/textView1"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" android:layout_centerInParent = "true"
android:text = "视频"
android:textAppearance = "?android:attr/textAppearanceLarge" />
</ RelativeLayout >
|
10、回到 MainActivity类,添加Tabs到ActionBar中,并处理点击滑动事件。完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
package com.example.tabswithswie;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBar.TabListener;
import android.support.v7.app.ActionBarActivity;
import com.example.tabswithswie.adatper.TabsPagerAdapter;
public class MainActivity extends ActionBarActivity implements TabListener {
private ViewPager viewPager;
private ActionBar actionBar;
private TabsPagerAdapter mTabsPagerAdapter;
private String[] tabs ={ "应用" , "游戏" , "视频" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取viewpager
viewPager = (ViewPager) findViewById(R.id.pager);
//实例化pageradapter
mTabsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mTabsPagerAdapter);
//获取适配的actionbar
actionBar = getSupportActionBar();
//设置home按钮不可点击
actionBar.setHomeButtonEnabled( false );
//设置顶部导航的模式 -tabs
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//添加标签
for (String tab:tabs)
{
actionBar.addTab(actionBar.newTab().setText(tab).setTabListener( this ));
}
//设置ViewPager切换时候的监听事件
viewPager.setOnPageChangeListener( new OnPageChangeListener() {
@Override
public void onPageSelected( int position) {
//页面滑动,顶部标签跟着改变
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled( int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged( int arg0) {
// TODO Auto-generated method stub
}
});
}
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) {
//tab选中,切换viewpager
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
} |
代码就是这样的,搞定收工了。
本文转自xuzw13 51CTO博客,原文链接:http://blog.51cto.com/xuzhiwei/1533803,如需转载请自行联系原作者