## 抽取BaseActivity解放你的titlebar ##

当项目过大的时候 往往需要多个Activity 为了避免每次重复写的title 我们将其抽取出来

  1. 需要的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: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="@mipmap/ic_launcher" />

        <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: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" />
    </RelativeLayout>

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

</LinearLayout>
  1. 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,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 View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    onClickLeft();
                }
            });
            rightBtn = (TextView) findViewById(R.id.base_menu_btn);
            rightBtn.setOnClickListener(new View.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 (Build.VERSION.SDK_INT >= Build.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();

}

3.简单的应用

    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();;  
        }  
    }  
  1. 效果如下这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值