zoukankan      html  css  js  c++  java
  • 用ActivityGroup实现动态加载-Android网易顶部导航栏(转)

       

              至于顶部导航的具体要用到的图片和布局大家自己调整。

            由于前面已经介绍了底部菜单栏了,所以一些重复性的代码就不贴上来了,最后我也会把下载地址贴上大家有兴趣自行下载。

            首先看一些顶部导航栏的布局文件:

    [html] view plaincopy
     
    1. <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" >
      <include layout="@layout/head" />

      <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
      <RadioGroup
      android:id="@+id/add_tab_group"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:gravity="center"
      android:paddingTop="6dp"
      android:paddingBottom="6dp"
      android:background="@drawable/big_button_up"
      android:orientation="horizontal"
      >

      <RadioButton
      android:id="@+id/main_tab_addExam"
      style="@style/MMTabButton1"
      android:layout_weight="1.0"
      android:checked="true"
      android:text="添加考试" />

      <RadioButton
      android:id="@+id/main_tab_myExam"
      style="@style/MMTabButton1"
      android:layout_weight="1.0"

      android:text="我的考试" />

      <RadioButton
      android:id="@+id/main_tab_message"
      style="@style/MMTabButton1"
      android:layout_weight="1.0"
      android:text="我的通知" />

      <RadioButton
      android:id="@+id/main_tab_testing"
      style="@style/MMTabButton1"
      android:layout_weight="1.0"
      android:text="测试" />
      <RadioButton
      android:id="@+id/main_tab_settings"
      style="@style/MMTabButton1"
      android:layout_weight="1.0"
      android:text="设置" />
      </RadioGroup>

      </LinearLayout>

      <LinearLayout
      android:id="@+id/container"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1" >
      </LinearLayout>
      </LinearLayout>


          具体宽度样式大家可以自己调节,然后看一下核心类:

      

    [html] view plaincopy
     
    1. import android.app.ActivityGroup;
      import android.app.AlertDialog;
      import android.app.LocalActivityManager;
      import android.content.Context;
      import android.content.DialogInterface;
      import android.content.Intent;
      import android.os.Bundle;
      import android.view.KeyEvent;
      import android.view.View;
      import android.view.animation.Animation;
      import android.view.animation.AnimationUtils;
      import android.widget.Button;
      import android.widget.LinearLayout;
      import android.widget.RadioGroup;
      import android.widget.TextView;
      import android.widget.RadioGroup.OnCheckedChangeListener;

      public class AddExamActivity extends ActivityGroup {

      protected Button btn_leftTop, btn_rightTop;
      protected TextView tv_head;

      private static LocalActivityManager manager;
      private RadioGroup radioGroup;
      private static LinearLayout container;
      public static Context context;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      super.onCreate(savedInstanceState);
      setContentView(R.layout.addexam);
      context=this;
      initHead();

      manager=getLocalActivityManager();
      container= (LinearLayout)findViewById(R.id.container);
      radioGroup=(RadioGroup) this.findViewById(R.id.add_tab_group);

      container.removeAllViews();
      container.addView(manager.startActivity(
      "PAGE_0",
      new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
      .getDecorView());

      radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

      @Override
      public void onCheckedChanged(RadioGroup group, int checkedId) {
      // TODO Auto-generated method stub
      switch (checkedId) {
      case R.id.main_tab_addExam://添加考试
      container.removeAllViews();
      container.addView(manager.startActivity(
      "PAGE_0",
      new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
      .getDecorView());
      break;
      case R.id.main_tab_myExam://我的考试
      container.removeAllViews();
      container.addView(manager.startActivity(
      "PAGE_1",
      new Intent(context, MyMessageActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
      .getDecorView());
      break;
      case R.id.main_tab_message://我的通知
      container.removeAllViews();
      container.addView(manager.startActivity(
      "PAGE_2",
      new Intent(context, SettingActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
      .getDecorView());
      break;
      case R.id.main_tab_testing://测试
      container.removeAllViews();
      container.addView(manager.startActivity(
      "PAGE_3",
      new Intent(context, TestingActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
      .getDecorView());
      break;
      case R.id.main_tab_settings://设置
      container.removeAllViews();
      container.addView(manager.startActivity(
      "PAGE_4",
      new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
      .getDecorView());
      break;
      default:
      //tabHost.setCurrentTabByTag("我的考试");
      break;
      }
      }
      });
      }
      public static void changeTo(){
      Animation slideLeftIn = AnimationUtils.loadAnimation(context, R.anim.slide_bottom_in_no_alpha);

      container.removeAllViews();
      container.addView(manager.startActivity(
      "PAGE_4",
      new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
      .getDecorView());
      container.startAnimation(slideLeftIn);
      }
      protected void initHead() {
      btn_leftTop = (Button) findViewById(R.id.btn_leftTop);
      btn_rightTop = (Button) findViewById(R.id.btn_rightTop);
      tv_head = (TextView) findViewById(R.id.tv_head);

      btn_leftTop.setVisibility(View.INVISIBLE);
      tv_head.setText("添加考试");
      }

      @Override
      public boolean onKeyDown(int keyCode, KeyEvent event) {
      // TODO Auto-generated method stub

      if (keyCode == KeyEvent.KEYCODE_BACK) {

      AlertDialog.Builder builder = new AlertDialog.Builder(getParent());
      builder.setMessage("你确定退出吗?")
      .setCancelable(false)
      .setPositiveButton("确定",
      new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog,
      int id) {
      finish();
      System.exit(0);
      }
      })
      .setNegativeButton("返回",
      new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog,
      int id) {
      dialog.cancel();
      }
      });
      AlertDialog alert = builder.create();
      alert.show();
      return true;
      }

      return super.onKeyDown(keyCode, event);
      }
      }

          这里继承了ActivityGroup,没有使用过的朋友从百度搜索下就明白了。

         使用了LocalActivityManager启动子activity,这里Context和LinearLayout使用了static静态的,这是因为变态的需求使我不得不这样做,希望大家不要把这两个变量设置成static的,因为static的生命周期很长特别是Context不要设置成static,这样的话当前的activity很难被销毁的。其实使用tabhost完全可以实现,但是为什么没使用tabhost的我相信大家都明白,如果不考虑内存的话我也会使用,哈哈!

  • 相关阅读:
    Android JNI 使用的数据结构JNINativeMethod详解 .
    datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)
    关于boostrap的modal隐藏问题(前端框架)
    三丰云服务器的基本使用(端口)
    Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
    云服务器内,nginx安装部署,Xshell,Xftp安装
    免费云服务器的申请(三丰云)
    vue的组件化运用(数据在两个组件互传,小问题总结)
    vue的表单编辑删除,保存取消功能
    datatable动态列处理,重绘表格(敲黑板,划重点!!!我肝了一天半才彻底弄懂这个东西,TAT)
  • 原文地址:https://www.cnblogs.com/weixiao870428/p/3486875.html
Copyright © 2011-2022 走看看