自定义基类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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/base_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blue"
    android:clipToPadding="true"
    android:fitsSystemWindows="true"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/base_titlebar"
        android:layout_width="match_parent"
        android:layout_height="50dp" >

        <ImageButton
            android:id="@+id/base_back_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:padding="10dp"
            android:background="@null"
            android:src="@drawable/back_white" />

        <TextView
            android:id="@+id/base_menu_btn"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:padding="10dp"
            android:gravity="center"
            android:layout_centerVertical="true"
            android:background="@null"
            android:text="设置"
            android:textColor="@color/Orange"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/base_title_tv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="标题"
            android:textColor="#ffffff"
            android:textSize="20sp" />
        <View android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_alignParentBottom="true"
            android:background="@color/igray_et"/>
    </RelativeLayout>

    <FrameLayout
        android:id="@+id/base_contentview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/white" >
    </FrameLayout>

</LinearLayout>

应用方法

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();;
	}
}

效果图如下

图片



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值