zoukankan      html  css  js  c++  java
  • 自定义BaseActivity

    思路很简单:将软件里用到的大量重复的页面布局抽象出来,编写成一个抽象的Activity类,然后在实现具体页面时继承它,并且在主内容空白区填入需要的内容。

    例如在最近开发的一款资讯类应用中,每张页面上面都有一个顶栏,上面有两个按钮,按钮中间是一行标题文字。按钮上的文字及点击后的功能在每个页面中可能会都不相同。如下图所示的。

    http://img.my.csdn.net/uploads/201106/15/0_1308137320P1C3.gif

    面对这样一个页面的需求,我们可以设计出一个基本的页面模板AbstractAc1,代码如下所示。

        /** 
         * 通用页面模板1:含上栏,包括左右两个按钮,一个title文字区 
         * @author zhe.yangz 
         */ 
        public class AbstractAc1 extends BaseActivity { 
            @Override 
            public void onCreate(Bundle savedInstanceState) { 
                super.onCreate(savedInstanceState); 
                setContentView(R.layout.abac_1); 
            } 
            /** 
             * 设置主内容区域的layoutRes 
             * @param layoutResId 
             */ 
            public void alabSetContentView(int layoutResId) { 
                LinearLayout llContent = (LinearLayout) findViewById(R.id.llContent1); 
                LayoutInflater inflater = (LayoutInflater) getSystemService( 
                        Context.LAYOUT_INFLATER_SERVICE); 
                View v = inflater.inflate(layoutResId, null); 
                llContent.addView(v); 
            } 
            /** 
             * 隐藏左侧按钮 
             */ 
            public void alabHideButtonLeft(boolean bSetHide) { 
                Button bt = alabGetButtonLeft(); 
                if (null != bt) { 
                    if (bSetHide) bt.setVisibility(View.INVISIBLE); 
                    else bt.setVisibility(View.VISIBLE); 
                } 
            } 
            /** 
             * 隐藏右侧按钮 
             */ 
            public void alabHideButtonRight(boolean bSetHide) { 
                Button bt = alabGetButtonRight(); 
                if (null != bt) { 
                    if (bSetHide) bt.setVisibility(View.INVISIBLE); 
                    else bt.setVisibility(View.VISIBLE); 
                } 
            } 
            /** 
             * 得到模板上导航栏的左侧按钮,一般为[返回] 
             * @return 成功则返回Button对象,失败则返回null。 
             */ 
            public Button alabGetButtonLeft() { 
                return (Button) findViewById(R.id.btBack1); 
            } 
            /** 
             * 得到模板上导航栏的右侧按钮,一般为[刷新] 
             * @return 成功则返回Button对象,失败则返回null。 
             */ 
            public Button alabGetButtonRight() { 
                return (Button) findViewById(R.id.btRefresh1); 
            } 
            /** 
             * 设置模板上导航栏中间的标题文字 
             * @param titleText 
             * @return 修改成功返回true,失败返回false 
             */ 
            public boolean alabSetBarTitleText(String titleText) { 
                TextView tv = (TextView) findViewById(R.id.txBarTitle1); 
                if (null != tv) { 
                    tv.setText(titleText); 
                    return true; 
                } 
                return false; 
            } 
        } 

    我们创建了一张模板页面,然后在应用中的实际页面继承于它。这样,每张继承的页面都可以拥有类似的顶栏布局,并且代码简洁。下面就是继承的例子。

        /** 
         * 样例页面 
        * @author zhe.yangz 
         */ 
        public class HomeActivity extends AbstractAc1 { 
            @Override 
            public void onCreate(Bundle savedInstanceState) { 
                super.onCreate(savedInstanceState); 
                alabSetContentView(R.layout.ac_home); 
                setTopBarAndAction(); 
            } 
            private void setTopBarAndAction() { 
                alabSetBarTitleText("TEST HOME"); // 设置Title标题 
                alabGetButtonLeft().setText("LeftBt"); // 设置左按钮上的文字 
                alabGetButtonRight().setText("RightBt"); // 设置右按钮上的文字 
                alabGetButtonRight().setOnClickListener(new OnClickListener() { 
                    @Override 
                    public void onClick(View v) { 
                        // 按钮执行事件 
                        // ... 
                    } 
                }); 
            } 
        } 

    就完成了一张具有如下顶栏效果的页面,页面的背景、按钮配色等效果在AbstractAc1中定义。

    clip_image004

    alabSetContentView()是在AbstractAc1中定义的方法,在衍生类中调用该方法,传入一个界面定义xml,方法中实现了 使用LayoutInflater生成view,使得这个页面中定义的主内容区的界面xml会和原来AbstractAc1的界面xml合并在一起,成为 一个完整的页面。有些情况下,左右按钮可以单独或一起隐藏,可以使用AbstractAc1中定义的alabHideButtonLeft和 alabHideButtonRight进行设置。

    使用模板化方式开发界面,目前我们开发的Android应用中的Activity的层次结构大致如下。

    http://img.my.csdn.net/uploads/201106/15/0_1308137321JqPK.gif

  • 相关阅读:
    解决centos7的root账户下无法通过code命令启动vscode
    centos7安装epel
    centos7用过yum安装vscode
    yum install gcc报错Error: Package: glibc-2.17-260.el7_6.6.i686 (updates) Requires: glibc-common = 2.17
    centos7通过yum从vim7升级到vim8
    解决VM虚拟机安装centos7无法联网
    centos7设置开机默认使用root账户登陆
    centos7使用sudo命令提示sudo command not found
    不同编译器下C++基本数据类型的字节长度
    C++函数模板
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4201562.html
Copyright © 2011-2022 走看看