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.