要实现在每个页面显示相同的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即可;