`

Android多Activity通用Title

 
阅读更多
先看一下效果图:



要实现在每个页面显示相同的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即可;
  • 大小: 31.7 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics