大家好,今天和大家分享的是菜单栏AtionBar的使用,在项目开发时需要切换界面就会用到ActionBar这工具,接下来,我给大家讲解的是ActionBar与Fragment携手操作的共同
例子,一边介绍ActionBar的同时,也复习了Fragment的使用。例子运行的效果界面如下图,,我简单解释,上边是一个选项ActionBar,中间是Fragment片段,下边是一个菜单,ActionBar与Fragment相互联系,而下边的菜单栏是新的一个模块,当点击分类会弹出新的Fragment,点击本地,网络也会有新的Fragment出现,恩,大致效果就是这样的。
1.res/layout下的xml文件
有四个xml文件,activity_main.xml,one_fragment.xml,two_fragment,three_fragment,其中三个Fragment的代码 是差不多的,就显示的图片和文字不同,我就以一个xml为例,其他两个省略。
activity_main.xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffcc"
android:id="@+id/content" >
one_fragment.xml
android:layout_height="match_parent"
android:orientation="vertical" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/ic_pada" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/imageView1"
android:layout_alignLeft="@+id/imageView1"
android:text="oneFragment"
android:textSize="25sp" />
2.src下的关键代码
同样src下也有四个java文件,它是和layout下的文件相对应的,Fragment实现的代码,是差不多相同的,我就以一个OneFragment为例子,其他两个省略掉。
OneFragment.java
/**
*好比一个Activity,用来显示界面和交互
*
*/
public class OneFragment extends Fragment {
private static final String TAG = "OneFragment";
private Context context;
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
//得到Activity
context=getActivity();
super.onCreate(savedInstanceState);
}
//创建视图对象,返回视图对象的view
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i(TAG, "onCreateView");
//使用inflater挂载布局xml,
return inflater.inflate(R.layout.one_fragment, container,false);
}
//创建Activity,当视图对象创建成功后,调用这个方法,进行监听和交互
public void onActivityCreated(Bundle savedInstanceState) {
Log.i(TAG, "onActivityCreated");
//添加图片点击事件,对象是View
View image = getActivity().findViewById(R.id.imageView1);
image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "我是OneFragment", Toast.LENGTH_SHORT).show();
}
});
super.onActivityCreated(savedInstanceState);
}
MainActivity.java
public class MainActivity extends Activity {
//定义ActoinBar
private ActionBar actionBar;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化,达到操作栏
actionBar = getActionBar();
//隐藏标题
actionBar.setDisplayShowTitleEnabled(false);
//隐藏返回图标
actionBar.setDisplayShowHomeEnabled(false);
//采用便签方式切换效果
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//创建OneFragment对象
OneFragment typeFragment = new OneFragment();
TwoFragment localFragment = new TwoFragment();
ThreeFragment netFragment = new ThreeFragment();
//设置actionBar属性。setTabListenter表示监听事件
actionBar.addTab(actionBar.newTab().setText("分类").setTag("type")
.setTabListener(new MyActionListener(typeFragment)));
actionBar.addTab(actionBar.newTab().setText("本地").setTag("local")
.setTabListener(new MyActionListener(localFragment)));
actionBar.addTab(actionBar.newTab().setText("网络").setTag("net")
.setTabListener(new MyActionListener(netFragment)));
}
//创建一个监听事件
private class MyActionListener implements TabListener {
//创建构造函数,Fragment是OneFragment的父类
private Fragment fragment;
public MyActionListener(Fragment fragment) {
this.fragment = fragment;
}
//actionBar被选择时,添加新的片段进来
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.content, fragment);
}
//没有被选择时移除
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
//下边的菜单栏
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//挂载menu/main.xml文件,使用的是getMenulnflater().inflate方式
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
//选择点击事件
public boolean onOptionsItemSelected(MenuItem item) {
//多判断,根据item的id
switch (item.getItemId()) {
case R.id.menu_add:
Toast.makeText(getApplicationContext(), "添加==", Toast.LENGTH_SHORT)
.show();
break;
case R.id.menu_del:
Toast.makeText(getApplicationContext(), "删除==", Toast.LENGTH_SHORT)
.show();
break;
case R.id.menu_copy:
Toast.makeText(getApplicationContext(), "复制==", Toast.LENGTH_SHORT)
.show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
3.res/menu/main.xml
android:icon="@drawable/ico_add"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="添加"/>
android:icon="@drawable/ico_del"
android:orderInCategory="99"
android:showAsAction="ifRoom"
android:title="删除"/>
android:icon="@drawable/ico_save"
android:orderInCategory="98"
android:showAsAction="ifRoom"
android:title="保存"/>
4.androidManifest.xml
在activity属性设置uiOptions,表示菜单栏在下边显示
android:uiOptions="splitActionBarWhenNarrow"
ActionBar与Fragment完美结合实现视图的切换就到了,相信大家看有所获,学到一点点,我写的博客就值的了,下回再见。