博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[原创]自定义BaseAcitivity的实现,统一activity的UI风格样式
阅读量:5898 次
发布时间:2019-06-19

本文共 2817 字,大约阅读时间需要 9 分钟。

    在开发过程中经常遇到多个activity是同一种样式类型的情况,如果分别对其进行UI的布局,不但比较繁琐,而且后续维护过程人力成本很高,不利于敏捷开发。解决的方案是采用抽象后的BaseActivity。
 
    BaseActivity一般作为一个app的所有或者部分activity的父类,并覆写setContentView( )等方法,以达到继承此BaseActivity的多个界面采用较为统一的样式进行开发,同时我们可以扩展BaseActivity的接口,提供一些灵活的个性化方式。下面是实现的主要步骤。
 
1.首先,为想要统一的样式做一个layout资源框架,用来提供UI显示的内容,一般来说可以使用上部ToolBar+下部ViewGroup的方式,并更改theme。
 
BaseActivity的layout资源:
 

 

自定义的theme,去掉ActionBar:

 

 

2.编写BaseActivity,为了使继承于BaseActivity的activity可以使用通常的函数进行UI控制,在BaseActivity中覆写setContentView( )方法。
下面是BaseActivity的实现:
 
package cn.carbs.testandroidbaseactivity;public class BaseActivity extends Activity{    protected RelativeLayout content;    protected int colorPrimary ;    protected int colorPrimaryDark ;    protected int colorAccent ;         @Override    protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         super.setContentView(getBaseActivityLayout());         TypedArray array = obtainStyledAttributes( new int[]{R.attr.colorPrimary, R.attr. colorPrimaryDark, R.attr.colorAccent});         colorPrimary = array.getColor(0, 0xFF1473AF);         colorPrimaryDark = array.getColor(1, 0xFF11659A);         colorAccent = array.getColor(2, 0xFF3C69CE);         array.recycle();    }         protected int getBaseActivityLayout() {         return R.layout.activity_base;    }         @Override    public void setContentView(int layoutResID) {         //使用如下方法可以将layoutResID对应的 xml资源的view解析出来,并添加到R.id.content中//       getLayoutInflater().inflate(layoutResID, (ViewGroup) this.findViewById(R.id.content));         //使用如下方法可以将layoutResID对应的 xml资源的view解析出来,并添加到R.id.content中//       View.inflate(this, layoutResID, (ViewGroup) this.findViewById(R.id.content));         //使用如下方法可以将layoutResID对应的 xml资源的viewinflate出来,但是没有添加到任何ViewGroup中//       View v = View.inflate(this, layoutResID, null);                   setContentView(View. inflate(this, layoutResID, null));    }         @Override    public void setContentView(View view) {         ((ViewGroup) this.findViewById(R.id.content))                            .addView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams. MATCH_PARENT));    }     }

 

3.编写一个Activity使其继承自BaseActivity:

 

package cn.carbs.testandroidbaseactivity;import android.os.Bundle;public class MainActivity extends BaseActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout. activity_main);    }    //可以通过如下代码,覆写BaseActivity中的主界面的布局    @Override    protected int getBaseActivityLayout(){     return R.layout. activity_base_new;    }   }

 

4.上述代码中用到的布局文件:
activity_main.xml
 

 

activity_base.xml

 

 

activity_base_new.xml

 

 

 

 

转载地址:http://euasx.baihongyu.com/

你可能感兴趣的文章
MySQL日常巡检
查看>>
Java基础面试题:super.getClass().getName() 执行结果是什么?
查看>>
Linux系统(X64)安装Oracle11g完整安装图文教程另附基本操作(转)
查看>>
Silverlight FullScreen 全屏
查看>>
springBoot的事物管理
查看>>
ASP.NET MVC 2.0 参考源码索引
查看>>
将double数据保留两位小数
查看>>
Echarts-axislabel文字过长导致显示不全或重叠
查看>>
C#winform自定义滚动条
查看>>
色差,15,还是15 ,换了颜色 就显的小了,
查看>>
security,
查看>>
SSH框架中配置log4j的方法
查看>>
【HDOJ】4704 Sum
查看>>
VS2013 快捷键 与 RESHARPER 冲突
查看>>
linux笔记:关机重启命令shutdown,系统运行级别init,退出登录logout
查看>>
装饰者模式&数据库连接池原理
查看>>
python自动化运维之路~DAY1
查看>>
运维面临的主要安全威胁介绍
查看>>
Hadoop生态圈-Hive函数
查看>>
OpenStack的基础原理
查看>>