Android多Activity通用Title

先看一下效果图:

[img]http://dl2.iteye.com/upload/attachment/0108/7371/2fee2a0e-4600-3532-b8cb-6b291d0c7f77.png[/img]

要实现在每个页面显示相同的Title,能想到的办法有:
1、创建单独的xml布局文件,在页面主配置文件中用include标签引入,如果要修改内容,可以再代码中获取View,修改内容;
2、用Android提供的Theme(在新建项目时可选),toolbar ,ActionBarActivity可以实现现在流行的material design,不过ActionBarActivity已经被AppCompatActivity取代了;
3、在1的基础上引入面向对象的思想,抽象出基类Activity(Fragment)。

下面记录一下3的实现过程:
1、新建抽象的Activity:

public abstract class BaseActivity extends Activity {

public static List<WeakReference<BaseActivity>> baseActivityList = new ArrayList<WeakReference<BaseActivity>>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WeakReference<BaseActivity> ba = new WeakReference<BaseActivity>(this);
baseActivityList.add(ba);
}

@Override
public void setContentView(int layoutResID) {
View contentView = LayoutInflater.from(this).inflate(layoutResID, null);
setContentView(contentView);
}

@Override
public void setContentView(View view) {
// TODO Auto-generated method stub
setContentView(view,null);
}

@Override
public void setContentView(View view,ViewGroup.LayoutParams lp) {
boolean hasTitle = hasTitle();
if(hasTitle){
int titleLayoutId = getCustomTitleLayoutId();
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
if(lp == null){
super.setContentView(view);
}else{
super.setContentView(view, lp);
}

Window w = getWindow();
w.setFeatureInt(Window.FEATURE_CUSTOM_TITLE, titleLayoutId);
Drawable titleBg = getTitleBg();
if(titleBg != null){
ViewGroup titleGroup = (ViewGroup)findViewById(R.id.title_root_group);
titleGroup.setBackgroundDrawable(titleBg);
}

initTitle();
}else{
requestWindowFeature(Window.FEATURE_NO_TITLE);
if(lp == null){
super.setContentView(view);
}else{
super.setContentView(view, lp);
}
}

}

/**
* 初始化View,分三部分:
* Left、Center、Right:可以设置图片、文字、点击事件
*/
private void initTitle(){
titleLeftTV = (TextView)findViewById(R.id.title_left_tv);
titleLeftIV = (ImageView)findViewById(R.id.title_left_iv);
titleNameTV = (TextView)findViewById(R.id.title_name_tv);
titleRightTV = (TextView)findViewById(R.id.title_right_tv);
titleRightIV = (ImageView)findViewById(R.id.title_right_iv);
//下面三个方法根据自己的要求实现;
setTitleLeftView();
setTitleNameView();
setTitleRightView();
}

/**
* 是否显示Title,子类可以重写;
* @return
*/
protected boolean hasTitle(){
return true;
}

/**
* Title布局文件;
* @return
*/
protected int getCustomTitleLayoutId(){
return R.layout.custom_common_title;
}

/**
* Title背景,子类可以重写;
* @return
*/
protected Drawable getTitleBg(){
return null;
}


@Override
protected void onDestroy() {
super.onDestroy();
for (int i = 0; i < baseActivityList.size(); i++) {
WeakReference<BaseActivity> ba = baseActivityList.get(i);
if (ba != null && null != ba.get() && ba.get() == this) {
baseActivityList.remove(i);
}
}
}
}


其他页面Activity只要继承此BaseActivity即可;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值