项目汇总之自定义ToolBar、BaseActivity

1、BaseActivity.java

package com.gyq.utilstest.base;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.View;

import com.gyq.utilstest.MyApplication;
import com.gyq.utilstest.R;
import com.gyq.utilstest.listener.MyToolBarClickListener;
import com.gyq.utilstest.widget.MyToolBar;


/**
 * Created by DELL on 2018/4/27.
 */


public abstract class BaseActivity extends FragmentActivity implements MyToolBarClickListener {

    public static final String IS_NOT_ADD_ACTIVITY_LIST = "is_add_activity_list";//是否加入到activity的list,管理

    protected Context mContext;
    protected MyApplication mApplication;
    protected String TAG = getClass().getName();

    protected ActivityFragmentInject annotation;
    protected MyToolBar myToolBar;
    protected DrawerLayout drawer;


    protected boolean eventFlag = true;

    protected String start_from;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
        if (!getClass().isAnnotationPresent(ActivityFragmentInject.class)) {
            throw new RuntimeException("must use ActivityFragmentInitParams.class");
        }
        start_from = getIntent().getStringExtra("start_from");
        annotation = getClass().getAnnotation(ActivityFragmentInject.class);
        mApplication = (MyApplication) getApplication();
        boolean isNotAdd = getIntent().getBooleanExtra(IS_NOT_ADD_ACTIVITY_LIST, false);
        synchronized (BaseActivity.class) {
            if (!isNotAdd)
                mApplication.getActivityList().add(this);
        }
        setContentView(annotation.contentViewId());
        if (annotation.hasToolbar()) {
            initToolbar();
        }



        findViewAfterViewCreate();
        initDataAfterFindView();
    }


    private void initToolbar() {
        myToolBar = (MyToolBar) findViewById(R.id.mytoolbar);
        myToolBar.setMyToolbarClickListener(this);
        int toolbarLeftIconId = annotation.toolbarLeftIcon();
        if (toolbarLeftIconId != -1) {
            myToolBar.setLeftIcon(toolbarLeftIconId);
        } else {
            myToolBar.getLeftIconRoot().setVisibility(View.GONE);
        }
        int toolbarRightIconId = annotation.toolbarRightIcon();
        if (toolbarRightIconId != -1) {
            myToolBar.setRightIcon(toolbarRightIconId);
        } else {
            myToolBar.getRightIconRoot().setVisibility(View.GONE);
        }
        int toolbarLeftTextId = annotation.toolbarLeftText();
        if (toolbarLeftTextId != -1) {
            myToolBar.setLeftText(toolbarLeftTextId);
        } else {
            myToolBar.getLeftTextRoot().setVisibility(View.GONE);
        }
        int toolbarRightTextId = annotation.toolbarRightText();
        if (toolbarRightTextId != -1) {
            myToolBar.setRightText(toolbarRightTextId);
        } else {
            myToolBar.getRightTextRoot().setVisibility(View.GONE);
        }
        int titleTextId = annotation.toolbarTitle();
        if (titleTextId != -1) {
            myToolBar.setTitleText(titleTextId);
        }
    }


    @Override
    protected void onPause() {
        super.onPause();

    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    @Override
    protected void onDestroy() {

        super.onDestroy();
    }

    @Override
    public void onBackPressed() {
        if (drawer != null) {
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            } else {
                super.onBackPressed();
            }
        } else {
            super.onBackPressed();
        }
    }

    protected abstract void findViewAfterViewCreate();

    protected abstract void initDataAfterFindView();

    @Override
    public void leftTextClick(View view) {

    }

    @Override
    public void leftIconClick(View view) {

    }

    @Override
    public void rightTextClick(View view) {

    }

    @Override
    public void rightIconClick(View view) {

    }


    protected void finishAll() {
        if (!isFinishing()) {
            finish();
        }
    }

    protected void finishWithTag(String tagName) {
        if (getClass().getSimpleName().equals(tagName)) {
            finish();
        }
    }


}

2、MyToolBar.java

package com.gyq.utilstest.widget;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.gyq.utilstest.R;
import com.gyq.utilstest.listener.MyToolBarClickListener;

/**
 * Created by DELL on 2018/4/27.
 */

public class MyToolBar extends LinearLayout implements View.OnClickListener {

    private Context mContext;

    private ImageView leftIcon;
    private ImageView rightIcon;
    private TextView titleText;
    private TextView titleText2;
    private TextView leftText;
    private TextView rightText;

    private RelativeLayout leftIconRoot, leftTextRoot, rightIconRoot, rightTextRoot;

    private MyToolBarClickListener myToolBarClickListener;

    public MyToolBar(Context context) {
        this(context, null);
    }

    public MyToolBar(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyToolBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        initView();
        initData();
    }

    private void initView() {
        View view = View.inflate(mContext, R.layout.widget_toolbar, this);
        leftIcon = (ImageView) view.findViewById(R.id.img_toolbar_left);
        rightIcon = (ImageView) view.findViewById(R.id.img_toolbar_right);
        titleText = (TextView) view.findViewById(R.id.txt_toolbar_title);
        leftText = (TextView) view.findViewById(R.id.txt_toolbar_left);
        rightText = (TextView) view.findViewById(R.id.txt_toolbar_right);

        leftIconRoot = (RelativeLayout) view.findViewById(R.id.img_toolbar_left_root);
        leftTextRoot = (RelativeLayout) view.findViewById(R.id.txt_toolbar_left_root);
        rightIconRoot = (RelativeLayout) view.findViewById(R.id.img_toolbar_right_root);
        rightTextRoot = (RelativeLayout) view.findViewById(R.id.txt_toolbar_right_root);
    }

    private void initData() {
        leftIconRoot.setOnClickListener(this);
        leftTextRoot.setOnClickListener(this);
        rightIconRoot.setOnClickListener(this);
        rightTextRoot.setOnClickListener(this);
    }

    public void setTitleText(String title) {
        titleText.setText(title);
    }

    public String getTitleText() {
        return titleText.getText().toString().trim();
    }

    public void setTitleText(int resId) {
        titleText.setText(resId);
    }

    public void setLeftText(int resId) {
        leftText.setText(resId);
    }

    public void setRightText(String title) {
        rightText.setText(title);
    }

    public String getRightText() {
        return rightText.getText().toString().trim();
    }

    public void setRightText(int resId) {
        rightText.setText(resId);
    }

    public void setLeftIcon(int resId) {
        leftIcon.setBackgroundResource(resId);
    }

    public void setRightIcon(int resId) {
        rightIcon.setBackgroundResource(resId);
    }

    public void setRightTextColor(int resId) {
        rightText.setTextColor(resId);
    }

    public RelativeLayout getLeftIconRoot() {
        return leftIconRoot;
    }

    public void setLeftIconRoot(RelativeLayout leftIconRoot) {
        this.leftIconRoot = leftIconRoot;
    }

    public RelativeLayout getLeftTextRoot() {
        return leftTextRoot;
    }

    public void setLeftTextRoot(RelativeLayout leftTextRoot) {
        this.leftTextRoot = leftTextRoot;
    }

    public RelativeLayout getRightIconRoot() {
        return rightIconRoot;
    }

    public void setRightIconRoot(RelativeLayout rightIconRoot) {
        this.rightIconRoot = rightIconRoot;
    }

    public RelativeLayout getRightTextRoot() {
        return rightTextRoot;
    }

    public void setRightTextRoot(RelativeLayout rightTextRoot) {
        this.rightTextRoot = rightTextRoot;
    }

    public void setRightIconVisiable(int visiable) {
        rightIconRoot.setVisibility(visiable);
        if (visiable == VISIBLE) {
            rightIconRoot.setOnClickListener(this);
            rightIconRoot.setClickable(true);
        } else {
            rightIconRoot.setOnClickListener(null);
            rightIconRoot.setClickable(false);
        }

    }

    public void setRightTextVisiable(int visiable) {
        rightTextRoot.setVisibility(visiable);
        if (visiable == VISIBLE) {
            rightTextRoot.setOnClickListener(this);
            rightTextRoot.setClickable(true);
        } else {
            rightTextRoot.setOnClickListener(null);
            rightTextRoot.setClickable(false);
        }
    }

    public void setTitleListener(OnClickListener onClickListener) {
        titleText.setOnClickListener(onClickListener);
    }


    @Override
    public void onClick(View v) {
        if (myToolBarClickListener == null) {
            return;
        }
        switch (v.getId()) {
            case R.id.img_toolbar_left_root:
                myToolBarClickListener.leftIconClick(v);
                break;
            case R.id.img_toolbar_right_root:
                myToolBarClickListener.rightIconClick(v);
                break;
            case R.id.txt_toolbar_left_root:
                myToolBarClickListener.leftTextClick(v);
                break;
            case R.id.txt_toolbar_right_root:
                myToolBarClickListener.rightTextClick(v);
                break;
        }
    }

    public void setMyToolbarClickListener(MyToolBarClickListener myToolbarClickListener) {
        this.myToolBarClickListener = myToolbarClickListener;
    }

    public void isShowPopup() {
        Drawable drawable = getResources().getDrawable(R.drawable.icon_select_family_up);
        drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
        titleText.setCompoundDrawables(null, null, drawable, null);
        titleText.setCompoundDrawablePadding(10);
    }


}

3、MyToolBarClickListener.java

package com.gyq.utilstest.listener;

import android.view.View;

/**
 * Created by DELL on 2018/4/27.
 */

public interface MyToolBarClickListener {
    void leftTextClick(View view);
    void leftIconClick(View view);
    void rightTextClick(View view);
    void rightIconClick(View view);
}

3.1布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/DIMEN_50dp"
    android:background="@color/white_ff">

    <RelativeLayout
        android:layout_width="@dimen/DIMEN_42dp"
        android:layout_height="match_parent"
        android:layout_centerVertical="true">

        <RelativeLayout
            android:id="@+id/img_toolbar_left_root"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/img_toolbar_left"
                android:layout_width="@dimen/DIMEN_22dp"
                android:layout_height="@dimen/DIMEN_22dp"
                android:layout_centerInParent="true" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/txt_toolbar_left_root"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/txt_toolbar_left"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                android:gravity="center_vertical"
                android:singleLine="true"
                android:textColor="@color/base_normal_txt_title"
                android:textSize="@dimen/DIMEN_15sp" />
        </RelativeLayout>
    </RelativeLayout>

    <TextView
        android:id="@+id/txt_toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:text="title"
        android:textColor="@color/base_normal_txt_title"
        android:textSize="@dimen/DIMEN_17sp"
        android:textStyle="bold" />


    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true">

        <RelativeLayout
            android:id="@+id/img_toolbar_right_root"
            android:layout_width="@dimen/DIMEN_42dp"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/img_toolbar_right"
                android:layout_width="@dimen/DIMEN_22dp"
                android:layout_height="@dimen/DIMEN_22dp"
                android:layout_centerInParent="true" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/txt_toolbar_right_root"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginRight="@dimen/DIMEN_10dp">

            <TextView
                android:id="@+id/txt_toolbar_right"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                android:gravity="center"
                android:singleLine="true"
                android:textColor="@color/base_normal_txt_title"
                android:textSize="@dimen/DIMEN_15sp" />
        </RelativeLayout>
    </RelativeLayout>

</RelativeLayout>

4、ActivityFragmentInject.java

package com.gyq.utilstest.base;


import com.gyq.utilstest.R;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface ActivityFragmentInject {

    /**
     * 顶部局的id
     *
     * @return
     */
    int contentViewId() default R.layout.activity_main;

    /**
     * 是否存在NavigationView
     *
     * @return
     */
    boolean hasNavigationView() default false;

    /**
     * 是否存在Toolbar
     *
     * @return
     */
    boolean hasToolbar() default false;

    /**
     * toolbar的标题id
     *
     * @return
     */
    int toolbarTitle() default -1;

    /**
     * 左边文本资源id
     * @return
     */
    int toolbarLeftText() default -1;

    /**
     * 右边文本资源id
     * @return
     */
    int toolbarRightText() default -1;

    /**
     * 左边图片资源id
     * @return
     */
    int toolbarLeftIcon() default -1;

    /**
     * 右边图片资源id
     * @return
     */
    int toolbarRightIcon() default -1;

}

6、MyApplication.java

package com.gyq.utilstest;

import android.app.Application;
import android.content.Context;

import com.gyq.utilstest.base.BaseActivity;

import java.util.LinkedList;

/**
 * Created by DELL on 2018/4/26.
 */

public class MyApplication extends Application{
    private static Context appContext;
    public static LinkedList<BaseActivity> mActivityList;

    @Override
    public void onCreate() {
        super.onCreate();
        appContext = this.getApplicationContext();
    }

    public static Context getContext() {
        return appContext;
    }

    /**
     * 返回一个存储所有存在的activity的列表
     *
     * @return
     */
    public LinkedList<BaseActivity> getActivityList() {
        if (mActivityList == null) {
            mActivityList = new LinkedList<BaseActivity>();
        }
        return mActivityList;
    }
}

前往查看demo.

猜你喜欢

转载自blog.csdn.net/duoduo_11011/article/details/80106893