• [Android]使用ActivityGroup来切换Activity和Layout


    前言

       在一个主界面中做Activity切换一般都会用TabActivity,使用方便,Activity互相之间相对独立,但是可定制性不强,而且修改起来很麻烦。当然也可以把layout分开,把逻辑代码全写在主界面的逻辑代码中,但是很明显可维护性相当差,这里通过ActivityGroup来解决这个问题。

    声明

      欢迎转载,但请保留文章原始出处:)

        博客园:http://www.cnblogs.com

        农民伯伯: http://www.cnblogs.com/over140/ 

    文章

      1.  Android: TabActivity Nested Activities

      2.  Android ActivityGroup的使用代码将子activty 的layout加入到主activity中

    正文

      一、效果图

        要求点击底部不同图片按钮切换不同的Activity,并在中间显示Activity对应的ContentView。

      二、 实现代码

        2.1  layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:orientation="vertical"
        android:layout_height="fill_parent">
        <LinearLayout android:gravity="center_horizontal"
            android:background="@drawable/myinfor2" android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            <TextView android:id="@+id/cust_title" android:textColor="@android:color/white"
                android:textSize="28sp" android:text="模块1" android:layout_width="wrap_content"
                android:layout_height="wrap_content"></TextView>
        </LinearLayout>
        <!-- 中间动态加载View -->
        <ScrollView android:measureAllChildren="true" android:id="@+id/containerBody"
            android:layout_weight="1" android:layout_height="fill_parent"
            android:layout_width="fill_parent">
        </ScrollView>
        <LinearLayout android:background="@android:color/black"
            android:layout_gravity="bottom" android:orientation="horizontal"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
            <!-- 功能模块按钮1 -->
            <ImageView android:id="@+id/btnModule1" android:src="@android:drawable/ic_dialog_dialer"
                android:layout_marginLeft="7dp" android:layout_marginTop="3dp"
                android:layout_marginBottom="3dp" android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <!-- 功能模块按钮2 -->
            <ImageView android:id="@+id/btnModule2" android:src="@android:drawable/ic_dialog_info"
                android:layout_marginLeft="7dp" android:layout_marginTop="3dp"
                android:layout_marginBottom="3dp" android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <!-- 功能模块按钮3 -->
            <ImageView android:id="@+id/btnModule3" android:src="@android:drawable/ic_dialog_alert"
                android:layout_marginLeft="7dp" android:layout_marginTop="3dp"
                android:layout_marginBottom="3dp" android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>

    TestView.java

    /**
     * 使用ActivityGroup来切换Activity和Layout
     * @author 农民伯伯
     * @version 2010-9-7
     * 
     */
    public class TestView extends ActivityGroup {
    
        private ScrollView container = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 隐藏标题栏
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            // 设置视图
            setContentView(R.layout.layout);
    
            container = (ScrollView) findViewById(R.id.containerBody);
    
            // 模块1
            ImageView btnModule1 = (ImageView) findViewById(R.id.btnModule1);
            btnModule1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    container.removeAllViews();
                    container.addView(getLocalActivityManager().startActivity(
                            "Module1",
                            new Intent(TestView.this, ModuleView1.class)
                                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                            .getDecorView());
                }
            });
    
            // 模块2
            ImageView btnModule2 = (ImageView) findViewById(R.id.btnModule2);
            btnModule2.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    container.removeAllViews();
                    container.addView(getLocalActivityManager().startActivity(
                            "Module2",
                            new Intent(TestView.this, ModuleView2.class)
                                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                            .getDecorView());
                }
            });
    
            // 模块3
            ImageView btnModule3 = (ImageView) findViewById(R.id.btnModule3);
            btnModule3.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    container.removeAllViews();
                    container.addView(getLocalActivityManager().startActivity(
                            "Module3",
                            new Intent(TestView.this, ModuleView3.class)
                                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                            .getDecorView());
                }
            });
        }
    }

    代码说明:

          a).  ModuleView1、ModuleView2、 ModuleView3分别继承自Activity。

          b).  想动态改变标题可以通过cust_title获取TextView进行设置。 

  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/a354823200/p/3909865.html
Copyright © 2020-2023  润新知