Android中利用ActivityGroup制作首页框架

上一次我总结了底部标签栏的制作,还总结了利用TabActivity制作首页框架。这次说一下利用ActivityGroup制作首页框架。其实这两种首页框架还挺一样的,因为核心的内容页面,都是使用的Activity,不是Fragment。所以我把这两个放在一起说一下。我们分为两部分说,一个是和TabActivity做一下对比,毕竟很一样嘛,要善于总结。一个是把代码贴一下。

1.ActivityGroup和TabActivity对比

  • 根布局节点不再采用TabHost,改为使用常见的线性布局LinearLayout。
  • 删除了例行公事地选项部件TabWidget
  • 内容页面由固定编号的框架布局改为自定义编号的线性布局

2.代码示例

可以看出ActivityGroup比TabActivity更加简洁,那么代码上如何我们看一下

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/fr_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <!-- 标签-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv1"
            style="@style/TabButton"
            android:drawableTop="@drawable/text_pic"
            android:text="首页" />

        <TextView
            android:id="@+id/tv2"
            style="@style/TabButton"
            android:drawableTop="@drawable/text_pic"
            android:text="商品" />

        <TextView
            android:id="@+id/tv3"
            style="@style/TabButton"
            android:drawableTop="@drawable/text_pic"
            android:text="发现" />

        <TextView
            android:id="@+id/tv4"
            style="@style/TabButton"
            android:drawableTop="@drawable/text_pic"
            android:text="我的" />
    </LinearLayout>
</LinearLayout>

布局的核心就是那个FrameLayout,其他都是普通的标签按钮,之前有讲过。

java源文件

public class MainActivity extends ActivityGroup implements View.OnClickListener {

    private TextView tv1;
    private TextView tv2;
    private TextView tv3;
    private TextView tv4;
    private FrameLayout fr_container;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv1 = findViewById(R.id.tv1);
        tv2 = findViewById(R.id.tv2);
        tv3 = findViewById(R.id.tv3);
        tv4 = findViewById(R.id.tv4);
        fr_container = findViewById(R.id.fr_container);
        tv1.setOnClickListener(this);
        tv2.setOnClickListener(this);
        tv3.setOnClickListener(this);
        tv4.setOnClickListener(this);
        tv1.setSelected(true);
        toActivity("one",OneActivity.class);
    }

    /**
     * 把内容视图切换到对应的Activity活动页面
     * @param label
     * @param cls
     */
    private void toActivity(String label,Class<?> cls){
        //创建一个意图,并存入指定包裹
        Intent intent = new Intent(this,cls);
        //移除内容框架下面的所有下级视图
        fr_container.removeAllViews();
        //启动意图指向的活动,并获取该活动页面的顶层视图
        View v = getLocalActivityManager().startActivity(label,intent).getDecorView();
        //设置内容视图的布局参数
        v.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
        //把活动页面的顶层视图(即内容视图)添加到内容框架上
        fr_container.addView(v);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.tv1:
                if (!tv1.isSelected()){
                    tv1.setSelected(true);
                    tv2.setSelected(false);
                    tv3.setSelected(false);
                    tv4.setSelected(false);
                    toActivity("one",OneActivity.class);
                }
                break;
            case R.id.tv2:
                if (!tv2.isSelected()) {
                    tv1.setSelected(false);
                    tv2.setSelected(true);
                    tv3.setSelected(false);
                    tv4.setSelected(false);
                    toActivity("two",TwoActivity.class);
                }
                break;
            case R.id.tv3:
                if (!tv3.isSelected()) {
                    tv1.setSelected(false);
                    tv2.setSelected(false);
                    tv3.setSelected(true);
                    tv4.setSelected(false);
                    toActivity("three",ThreeActivity.class);
                }
                break;
            case R.id.tv4:
                if (!tv4.isSelected()) {
                    tv1.setSelected(false);
                    tv2.setSelected(false);
                    tv3.setSelected(false);
                    tv4.setSelected(true);
                    toActivity("four",FourActivity.class);
                }
                break;
        }
    }
}

Activity中首先我们继承了ActivityGroup,其次重点是toActivity方法,我们向其中传入一个标记label和对应Activity的Class对象即可。在跳转时调用toActivity方法。

猜你喜欢

转载自blog.csdn.net/weixin_38322371/article/details/114068467