菜单栏ActionBar与Fragment完美使用

来源:互联网 发布:thug life软件 编辑:程序博客网 时间:2024/06/05 13:35

大家好,今天和大家分享的是菜单栏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

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffcc"
    android:id="@+id/content" >

</FrameLayout>

one_fragment.xml

<?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:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/ic_pada" />

    <TextView
        android:id="@+id/textView1"
        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" />

</RelativeLayout>

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

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--showAsAction: 以菜单按钮的形式展示
      ifRoom:有空间则展示
      never :不展示,放在溢出栏中
      always:一直展示
      withText: 与文本一起展示
      collapseActionView:折叠展示

     orderlnCategory:显示的排列方式
     -->
   
    <item
        android:id="@+id/menu_add"
        android:icon="@drawable/ico_add"
        android:orderInCategory="100"
        android:showAsAction="ifRoom"
        android:title="添加"/>
    <item
        android:id="@+id/menu_del"
        android:icon="@drawable/ico_del"
        android:orderInCategory="99"
        android:showAsAction="ifRoom"
        android:title="删除"/>
    <item
        android:id="@+id/menu_copy"
        android:icon="@drawable/ico_save"
        android:orderInCategory="98"
        android:showAsAction="ifRoom"
        android:title="保存"/>

</menu>

4.androidManifest.xml

在activity属性设置uiOptions,表示菜单栏在下边显示

 android:uiOptions="splitActionBarWhenNarrow"


ActionBar与Fragment完美结合实现视图的切换就到了,相信大家看有所获,学到一点点,我写的博客就值的了,下回再见。




0 0
原创粉丝点击