自定义基类BaseActivity,节省开发步骤

自己在开发过程中发现同一个APP中,一般多个activity都拥有相同的Titlebar,而且相同的按钮作用也是一样的,如果每次在xml中都去写布局文件,未免太费事,不如直接抽取一个基类BaseActivity,以后自己开发activity直接继承BaseActivity就好,这里记录下自己曾经抽取的BaseActivity

public abstract class BaseActivity extends Activity {

	
	public ViewGroup contentView;
	private TextView rightBtn;
	private View leftBtn;
	private TextView titltTv;
	private View titlebar;
	@SuppressLint("InlinedApi")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_base);
		setTranslucentStatus();
		
		
		int titlebarResId = getTitlebarResId();
		if (titlebarResId!=0) {
			LinearLayout view=(LinearLayout) findViewById(R.id.base_view);
			view.removeViewAt(0);
			LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,DensityUtils.dp2px(this, 50));
			ViewGroup titleView=(ViewGroup) View.inflate(this, titlebarResId, null);
			view.addView(titleView, 0,lp);
			view.setBackgroundDrawable(titleView.getBackground());
			titlebar=titleView;
		}else {
			titlebar=findViewById(R.id.base_titlebar);
			leftBtn = findViewById(R.id.base_back_btn);
			leftBtn.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					onClickLeft();
				}
			});
			rightBtn = (TextView) findViewById(R.id.base_menu_btn);
			rightBtn.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					onClickRight();
				}
			});
			titltTv=(TextView) findViewById(R.id.base_title_tv);
		}
		
		contentView=(ViewGroup) findViewById(R.id.base_contentview);
		contentView.addView(View.inflate(this, getContentView(), null));
		setRightBtnVisible(false);
		
	}
	
	@Override
	public void overridePendingTransition(int enterAnim, int exitAnim) {
		super.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
	}
	
	/** 
     * 设置状态栏背景状态 
     */  
    private void setTranslucentStatus()   
    {  
    	//判断当前SDK版本号,如果是4.4以上,就是支持沉浸式状态栏的
		if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
			getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
			getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

		}
     
    }  
	
	/**
	 * 点击左侧按钮
	 * 默认是退出
	 */
	protected void onClickLeft() {
		finish();
	}
	
	/**
	 * 点击右侧按钮
	 * 默认什么都不做
	 */
	protected void onClickRight() {
		
	}
	
	/**
	 * 设置左侧按钮显示与隐藏
	 * @param visible
	 */
	public void setLeftBtnVisible(Boolean visible) {
		if (leftBtn!=null) {
			if (visible) {
				leftBtn.setVisibility(View.VISIBLE);
			}else{
				leftBtn.setVisibility(View.GONE);
			}
		}
		
	}
	
	/**
	 * 设置右侧按钮显示与隐藏
	 * @param visible
	 */
	public void setRightBtnVisible(Boolean visible) {
		if (rightBtn!=null) {
			if (visible) {
				rightBtn.setVisibility(View.VISIBLE);
			}else{
				rightBtn.setVisibility(View.GONE);
			}
		}
		
	}
	
	/**
	 * 获取自定义标题栏
	 * 如果子类复写并返回不等于0的布局文件,将会覆盖默认标题
	 * 返回0 将会采用默认标题
	 * @return
	 */
	protected int getTitlebarResId() {
		return 0;
	}
	
	/**
	 * 设置中间标题
	 * @param title
	 */
	public void setTitle(String title){
		if (titltTv!=null) {
			if (titltTv!=null) {
				titltTv.setText(title);
			}
		}
	}
	
	
	/**
	 * 设置右边你按钮文字属性
	 * @param title
	 */
	public void setRtTitle(String title){
		if (rightBtn!=null) {
			rightBtn.setText(title);
		}
	}
	
	public View getTitleBar(){
		
		return titlebar;
	} 
	
	
	/**
	 * 获取中间内容显示区
	 * @return
	 */
	protected abstract int getContentView();
	
}

用到的activity_base.xml



    

        

        

        
        
    

    
    


应用方法

public class MainActivity extends BaseActivity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setTitle("主页");
		setRtTitle("设置");
		setRightBtnVisible(true);
	}
	@Override
	protected int getContentView() {
		return R.layout.activity_main;//任意非空布局
	}
	
	
	@Override
	protected void onClickRight() {
		Toast.makeText(this, "设置", 0).show();;
	}
}

效果图如下

自定义基类BaseActivity,节省开发步骤_第1张图片



你可能感兴趣的:(安卓开发)