记录一下我的Android项目里的基类的的基本设计

BaseActivity基类里面的UI设计通常有以下一个部分:1.title的控制  2.加载的控制 3.主体内容的显示 4.没网或是没数据时的异常显示 

另外还有Activity跳转的控制。

先看看我的基类的xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <com.jingubank.main.view.TitleBar
        android:id="@+id/base_fragment_title_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <include
        android:id="@+id/base_fragment_net_error"
        layout="@layout/common_neterror"
        android:visibility="gone" />

    <include
        android:id="@+id/base_fragment_empty"
        layout="@layout/common_empty"
        android:visibility="gone" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <FrameLayout
            android:id="@+id/base_fragment_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <include
            android:id="@+id/base_fragment_loading"
            layout="@layout/common_loading_pro"
            android:visibility="gone" />
    </FrameLayout>
</LinearLayout>

BaseActivity

package com.example.main.base;

import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.main.R;
import com.example.main.common.app.AppManager;
import com.example.main.finance.other.ChackGesturePswActivity;
import com.example.main.utils.ActivityAnim;
import com.example.main.utils.NetWorkUtils;
import com.example.main.utils.ResourcesUtils;
import com.example.main.utils.StatusBarUtil;
import com.example.main.view.TitleBar;


public abstract class BaseActivity extends AppCompatActivity {
    protected Context mContext;
    private InputMethodManager manager = null;
    protected BaseApplication application;

    protected TitleBar viewTitleBar;
    private FrameLayout viewContent;
    private LinearLayout viewEmpty, viewNetError;
    private View viewLoading;
    private int viewContentId;//viewPageLayoutId

    protected View rootView;
    private TextView base_neterror_tv;
    private TextView base_empty_tv;

    long currentTime = 0;


    @Override
    protected void onDestroy() {
        super.onDestroy();
        AppManager.getAppManager().removeActivity(this);
    }

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        this.mContext = this;
        this.viewContentId = onCreateViewId();
        try {
            getExras();
        } catch (Exception e) {
            e.printStackTrace();
        }
        setContentView(R.layout.base_page_title);
        initViewPage();
        setListener();
        titleBarSet(viewTitleBar);
        if (NetWorkUtils.isConnected(mContext)) {
            viewContent.setVisibility(View.VISIBLE);
        } else {
            showViewNetError(true, null);
        }

        AppManager.getAppManager().addActivity(this);//推入栈中

    }

    /**
     * 设置广播接收,区别操作
     */
    protected int whereId;

    @Override
    public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
        return super.onCreateView(parent, name, context, attrs);
    }

    @Override
    public View onCreateView(String name, Context context, AttributeSet attrs) {
        return super.onCreateView(name, context, attrs);

    }

    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(layoutResID);
        setStatusBar();
    }

    /**
     * 设置状态栏
     */
    protected void setStatusBar() {
        StatusBarUtil.setColor(this, getResources().getColor(R.color.transparent));
    }

    @Override
    public void onResume() {
        super.onResume();
        fromNetGetData();
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    /**
     * 设置标题栏
     *
     * @param titleBar
     */
    protected abstract void titleBarSet(TitleBar titleBar);

    /**
     * 设置页面布局
     *
     * @return
     */
    protected abstract int onCreateViewId();

    /**
     * 设置页面布局实例化
     *
     * @return
     */
    protected abstract void onCreateViewContent(View view);

    /**
     * 请求网络数据
     */
    protected abstract void fromNetGetData();

    /**
     * 本地传参
     */
    protected abstract void getExras();

    /**
     * 监听事件
     */
    protected abstract void setListener();

    /**
     * 加载框,是否显示
     *
     * @param show
     */
    protected void showViewLoading(boolean show) {
        if (show) {
            viewLoading.setVisibility(View.VISIBLE);
        } else {
            viewLoading.setVisibility(View.GONE);
        }
    }

    /**
     * 空数据,是否显示
     *
     * @param show
     */
    protected void showEmptyView(boolean show) {
        if (show) {
            viewEmpty.setVisibility(View.VISIBLE);
        } else {
            viewEmpty.setVisibility(View.GONE);
        }
    }


    /**
     * 网络错误,是否显示
     *
     * @param show
     */
    protected void showViewNetError(boolean show, View.OnClickListener onClickListener) {
        if (show) {
            viewNetError.setOnClickListener(onClickListener);
            viewNetError.setVisibility(View.VISIBLE);
        } else {
            viewNetError.setVisibility(View.GONE);
        }
    }

 

    /**
     * 初始化页面内容
     */
    private void initViewPage() {
        try {
            viewTitleBar = (TitleBar) findViewById(R.id.base_fragment_title_bar);
            viewEmpty = (LinearLayout) findViewById(R.id.base_fragment_empty);
            viewNetError = (LinearLayout) findViewById(R.id.base_fragment_net_error);
            viewContent = (FrameLayout) findViewById(R.id.base_fragment_content);
            viewLoading = findViewById(R.id.base_fragment_loading);

            base_neterror_tv = (TextView) findViewById(R.id.base_neterror_tv);
            base_empty_tv = (TextView) findViewById(R.id.base_empty_tv);
            View viewPage = View.inflate(mContext, viewContentId, null);
            rootView = findViewById(R.id.root_view);
            viewContent.addView(viewPage);
            onCreateViewContent(viewPage);

            viewEmpty.setVisibility(View.GONE);
            viewNetError.setVisibility(View.GONE);
        } catch (Exception e) {
            showViewLoading(false);
            e.printStackTrace();
        }
    }

 

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        /**
         * 点击空白处隐藏软键盘
         */
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null) {
                if (manager == null) {
                    manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                }
                manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
            }
        }
        return super.onTouchEvent(event);
    }

    @Override
    public BaseApplication getApplicationContext() {
        return (BaseApplication) super.getApplicationContext();
    }

    @Override
    public void onBackPressed() {
        ActivityAnim.finshActivity(this);
    }

}

公共的Title common_title_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="51dp"
    android:background="@color/cffffff"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/title_search_layout"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:paddingLeft="11dp"
        android:paddingRight="13dp"
        android:visibility="gone">

        <TextView
            android:id="@+id/title_bar1_left"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:drawableLeft="@mipmap/icon_location"
            android:gravity="center_vertical"
            android:minWidth="15dp"
            android:scaleType="centerInside"
            android:text="全国"
            android:textSize="14sp" />

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:layout_toLeftOf="@+id/title_bar1_right"
            android:layout_toRightOf="@+id/title_bar1_left">

            <EditText
                android:id="@+id/title_bar1_edt"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginBottom="5dp"
                android:layout_marginTop="5dp"
                android:background="@drawable/bg_search_shape_white"
                android:drawableLeft="@mipmap/search_icon_find"
                android:drawablePadding="5dp"
                android:enabled="true"
                android:gravity="center_vertical"
                android:hint="搜索商品"
                android:maxLines="1"
                android:paddingLeft="15dp"
                android:paddingRight="25dp"
                android:textSize="14sp" />

            <ImageView
                android:id="@+id/title_bar1_clear"
                android:layout_width="25dp"
                android:layout_height="25dp"
                android:layout_gravity="center_vertical|right"
                android:layout_marginRight="5dp"
                android:src="@mipmap/icon_close" />
        </FrameLayout>

        <TextView
            android:id="@+id/title_bar1_right"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:gravity="center"
            android:minWidth="50dp"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:text="取消"
            android:textColor="#000000"
            android:textSize="14sp" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp">

        <TextView
            android:id="@+id/title_bar_back"
            android:layout_width="110dp"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:drawableLeft="@drawable/ic_title_back"
            android:ellipsize="end"
            android:gravity="center_vertical"
            android:minWidth="45dp"
            android:singleLine="true"
            android:visibility="visible" />

        <TextView
            android:id="@+id/title_bar_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="70dp"
            android:layout_marginRight="70dp"
            android:gravity="center"
            android:text="@string/app_name_lib"
            android:textColor="#000000"
            android:textSize="16sp" />

        <LinearLayout
            android:id="@+id/title_bar_right"
            android:layout_width="wrap_content"
            android:layout_height="45dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:gravity="center_vertical"
            android:minWidth="45dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/title_bar_set"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:drawableRight="@mipmap/title_icon_add"
                android:gravity="center"
                android:minWidth="50dp"
                android:paddingRight="7dp"
                android:text=""
                android:textColor="#000000"
                android:textSize="14sp" />

            <TextView
                android:id="@+id/title_bar_edt"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:minWidth="50dp"
                android:text="编辑"
                android:textColor="#000000"
                android:textSize="14sp" />
        </LinearLayout>
    </RelativeLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_alignParentBottom="true"
        android:layout_gravity="bottom"
        android:background="#e3e3e3" />
</LinearLayout>

TitleBar

package com.example.main.view;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.main.R;

 
public class TitleBar extends LinearLayout implements View.OnClickListener {
    /**
     * 文字标题栏
     */
    private TextView viewTxtName, viewTxtBack;
    private TextView viewTxtSet, viewTxtEdt;
    /**
     * 搜索栏,UI控件
     */
    private TextView v1TvLeft,v1TvRight;
    private ImageView v1ImgClear;
    private EditText v1EdtSearch;


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

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

    public TitleBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView();
    }

    /**
     * 初始化文字标题栏
     */
    private void initView() {
        setOrientation(LinearLayout.VERTICAL);
        View.inflate(getContext(), R.layout.common_title_bar, this);

        viewTxtName = (TextView) findViewById(R.id.title_bar_name);
        viewTxtBack = (TextView) findViewById(R.id.title_bar_back);
        viewTxtSet = (TextView) findViewById(R.id.title_bar_set);
        viewTxtEdt = (TextView) findViewById(R.id.title_bar_edt);

        viewTxtBack.setOnClickListener(this);
        viewTxtSet.setOnClickListener(this);
        viewTxtEdt.setOnClickListener(this);
        viewTxtSet.setVisibility(View.GONE);
        viewTxtEdt.setVisibility(View.GONE);
    }

    public final static int clickBack = 1;//返回
    public final static int clickEdt = 2;
    public final static int clickSet = 3;
    public final static int click1Edt= 4;
    public final static int click1Left = 5;
    public final static int click1Right = 6;
    public final int click1Clear = 7;

    public enum TitleType {
        set, back, edt;
    }
    @Override
    public void onClick(View v) {
        int i = v.getId();
        if (i == R.id.title_bar_back) {
            if (titleBarClickImpl != null) {
                titleBarClickImpl.titleOnClick(clickBack);
            }
        } else if (i == R.id.title_bar_set) {
            if (titleBarClickImpl != null) {
                titleBarClickImpl.titleOnClick(clickSet);
            }
        } else if (i == R.id.title_bar_edt) {
            if (getTitleBarClickImpl() != null) {
                titleBarClickImpl.titleOnClick(clickEdt);
            }
        } else if (i == R.id.title_bar1_left) {
            if (getTitleBarClickImpl() != null) {
                titleBarClickImpl.titleOnClick(click1Left);
            }
        }  else if (i == R.id.title_bar1_clear) {
               if (v1EdtSearch!=null){
                   v1EdtSearch.setText("");
               }
//                titleBarClickImpl.titleOnClick(click1Clear);
        }else if (i == R.id.title_bar1_edt) {
            if (getTitleBarClickImpl() != null) {
                titleBarClickImpl.titleOnClick(click1Edt);
            }
        } else if (i == R.id.title_bar1_right) {
            if (getTitleBarClickImpl() != null) {
                titleBarClickImpl.titleOnClick(click1Right);
            }
        }
    }

    TitleBarClick titleBarClickImpl;

    public TitleBarClick getTitleBarClickImpl() {
        return titleBarClickImpl;
    }

    public void setTitleBarClickImpl(TitleBarClick titleBarClickImpl) {
        this.titleBarClickImpl = titleBarClickImpl;
    }

    /**
     * 标题栏,点击事件监听接口
     */
    public interface TitleBarClick {
        /**
         * @param titleType 1:Back,2:edt,3:set,4:搜索,5位置,6搜索取消
         */
        void titleOnClick(int titleType);
    }
    /**
     * 设置原返回键图标,及文字 0不设置图标
     */
    public void setLeftView(int drwId,String name){
        setTextDrwName(viewTxtBack,drwId);
        viewTxtBack.setText(textDealWithStr(name));
    }
    /**
     * 设置原设置键图标,及文字 0不设置图标
     */
    public void setRightSet(int drwId,String name){
        setTextDrwNameRight(viewTxtSet,drwId);
        viewTxtSet.setText(textDealWithStr(name));
    }

    /**
     * 设置原设置键图标,及文字 0不设置图标
     */
    public void setRightSetColor(String name,int resId){
        viewTxtSet.setText(textDealWithStr(name));
        setTextDrwNameRight(viewTxtSet,0);
        viewTxtSet.setTextColor(getResources().getColor(resId));
    }
    /**
     * 设置原编辑键图标,及文字 0不设置图标
     */
    public void setRightEdit(int drwId,String name){
        setTextDrwNameRight(viewTxtEdt,drwId);
        viewTxtEdt.setText(textDealWithStr(name));
    }
    private void setTextDrwName(TextView textView,int drawId){
        Drawable drawable=null;
        if (drawId!=0){
            drawable=getResources().getDrawable(drawId);
            drawable.setBounds( 0, 0,drawable.getMinimumWidth(),drawable.getMinimumHeight());
        }
        textView.setCompoundDrawables(drawable, null, null, null);
    }
//设置右侧
    private void setTextDrwNameRight(TextView textView,int drawId){
        Drawable drawable=null;
        if (drawId==101){
            textView.setTextColor(Color.parseColor("#C39F8A"));
        }else if(drawId!=101&&drawId!=0){
            drawable=getResources().getDrawable(drawId);
            drawable.setBounds( 0, 0,drawable.getMinimumWidth(),drawable.getMinimumHeight());
        }
        textView.setCompoundDrawables(null, null,drawable, null);
    }
    public void setTitleName(String name) {
            viewTxtName.setText(textDealWithStr(name));
    }

    /**
     * 设置搜索标题栏,显示搜索栏
     *
     * @param clickEdt 是否可编辑
     */
    public void setSearchTitle(boolean clickEdt, boolean showRight, boolean showLeft) {
        View viewSearch = findViewById(R.id.title_search_layout);
        viewSearch.setVisibility(View.VISIBLE);
        v1EdtSearch = (EditText) findViewById(R.id.title_bar1_edt);
        v1ImgClear= (ImageView) findViewById(R.id.title_bar1_clear);
        v1ImgClear.setVisibility(View.GONE);
        v1ImgClear.setOnClickListener(this);
        v1TvRight = (TextView) findViewById(R.id.title_bar1_right);
        if (showRight) {
            v1TvRight.setVisibility(View.VISIBLE);
            v1TvRight.setOnClickListener(this);
        } else {
            v1TvRight.setVisibility(View.GONE);
        }

        v1TvLeft = (TextView) findViewById(R.id.title_bar1_left);
        if (showLeft) {
            v1TvLeft.setVisibility(View.VISIBLE);
            v1TvLeft.setOnClickListener(this);
        } else {
            v1TvLeft.setVisibility(View.GONE);
        }

        if (clickEdt) {
            v1EdtSearch.setEnabled(true);
        } else {
            v1EdtSearch.setEnabled(true);
            v1EdtSearch.setOnClickListener(this);
        }
    }

    /**
     * 设置输入框监听观察者
     * @param textWatcher
     */
    public void setSearchEdtView(TextWatcher textWatcher,String hint){
        if (v1EdtSearch!=null) {
            v1EdtSearch.addTextChangedListener(textWatcher);
//            v1EdtSearch.setHint(hint);
        }
    }

    /**
     * 选取搜搜内容
     * @return
     */
    public String getSearchTxt(){
        if (v1EdtSearch!=null) {
            return v1EdtSearch.getText().toString();
        }else{
            return "";
        }
    }
    /**
     * 设置搜索框内容是否可清除 图标
     * @param show
     */
    public void setSearchClear(boolean show){
        if (v1ImgClear!=null) {
            if (show){
                v1ImgClear.setVisibility(View.VISIBLE);
            }else{
                v1ImgClear.setVisibility(View.GONE);
            }
        }
    }

    /**
     * 设置搜索显示内容
     * @param search
     */
    public void setSearchText(String search){
        if (v1EdtSearch!=null) {
            v1EdtSearch.setText(search);
        }
    }
    /**
     * 设置搜索标题栏,左侧定位按钮显示
     * @param name
     * @param drawableId
     */
    public void setSearchLeftTv(String name,int drawableId) {
        if (v1TvLeft == null) {
            v1TvLeft = (TextView) findViewById(R.id.title_bar1_left);
        }
        v1TvLeft.setVisibility(View.VISIBLE);
        setTextDrwName(v1TvLeft,drawableId);
        v1TvLeft.setText(textDealWithStr(name));
    }

    /**
     * 设置搜索标题栏,右侧定位按钮显示
     * @param name
     * @param drawableId 0不显示图标
     */
    public void setSearchRightTv(String name,int drawableId) {
        if (v1TvRight == null) {
            v1TvRight = (TextView) findViewById(R.id.title_bar1_right);
        }
        v1TvRight.setVisibility(View.VISIBLE);
        setTextDrwName(v1TvRight,drawableId);
        v1TvRight.setText(textDealWithStr(name));
    }
    /**
     * @param nameId
     */
    public void setTitleName(int nameId) {
        viewTxtName.setText(nameId);
    }

    public void setTitleBackName(String name) {
            viewTxtBack.setText(textDealWithStr(name));
    }

    public void setTitleEdtName(String name) {
            viewTxtEdt.setText(textDealWithStr(name));
    }
    //处理字符串 不是null
    private String textDealWithStr(String name){
        return TextUtils.isEmpty(name)?"":name;
    }

    /**
     * 普通文字标题栏
     * @param back 是否显示返回键
     * @param edt 是否显示编辑键
     * @param set 是否显示设置键
     */
    public void setShowIcon(boolean back, boolean edt, boolean set) {
        if (back) {
            viewTxtBack.setVisibility(View.VISIBLE);
        } else {
            viewTxtBack.setVisibility(View.GONE);
        }
        if (edt) {
            viewTxtEdt.setVisibility(View.VISIBLE);
        } else {
            viewTxtEdt.setVisibility(View.GONE);
        }
        if (set) {
            viewTxtSet.setVisibility(View.VISIBLE);
        } else {
            viewTxtSet.setVisibility(View.GONE);
        }
    }
}


common_loading.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/transparent"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/common_toast_bg"
        android:gravity="center"
        android:minWidth="110dp"
        android:orientation="vertical"
        android:padding="10dp">

        <ProgressBar
            style="@style/mProgress_circle"
            android:layout_width="40dp"
            android:layout_height="40dp" />

        <TextView
            android:id="@+id/loading_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:paddingTop="10dp"
            android:text="请稍后"
            android:textColor="@color/white"
            android:textSize="@dimen/textsize_9" />

    </LinearLayout>
</LinearLayout>
 

drawable/common_toast_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#303030" />
    <corners
        android:bottomLeftRadius="5dp"
        android:bottomRightRadius="5dp"
        android:topLeftRadius="5dp"
        android:topRightRadius="5dp" />
</shape> 


style里添加

    <!--旋转进度条-->
    <style name="mProgress_circle">
        <item name="android:indeterminateDrawable">@drawable/progress_circle_shape</item>
        <item name="android:minWidth">25dp</item>
        <item name="android:minHeight">25dp</item>
        <item name="android:maxWidth">60dp</item>
        <item name="android:maxHeight">60dp</item>
    </style>

转的环形圈圈 drawable/progress_circle_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotY="50%"
    android:toDegrees="360">
      
    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="10"
        android:useLevel="false">
        <gradient
            android:centerColor="#C39F8A"
            android:centerY="0.50"
            android:endColor="#C39F8A"
            android:startColor="#FFFFFF"
            android:type="sweep"
            android:useLevel="false" />
          
    </shape>
</rotate>

我们的类集成BaseActivity,方便之处列举:

1.设置标题

  @Override
    protected void titleBarSet(TitleBar titleBar) {
        titleBar.setTitleName("存管开户");
        titleBar.setTitleBarClickImpl(new TitleBar.TitleBarClick() {
            @Override
            public void titleOnClick(int titleType) {
                switch (titleType) {
                    case TitleBar.clickBack:
                        SharePreferenceUtil.setValue(getApplicationContext(), UserConfig.HAS_KAIHU, true);
                        ActivityAnim.finshActivity(FinanceKaiHuActivity.this);
                        break;
                }
            }
        });

    }


2.请求网络数据时控制loading

 showViewLoading(true);
 showViewLoading(false);


3.Activity管理 。BaseActivity里实现了,子类不用做什么

 protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);

        AppManager.getAppManager().addActivity(this);//推入栈中
}

   @Override
    protected void onDestroy() {
        super.onDestroy();
        AppManager.getAppManager().removeActivity(this);
}


AppManager实现Activity堆栈管理

package com.jingubank.main.common.app;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.Intent;

import com.jingubank.main.finance.index.IndexActivity;

import java.util.List;
import java.util.Stack;

public class AppManager {
    public static Stack<Activity> activityStack;
    private static AppManager instance;

    private long exitTime = 0;

    public AppManager() {
    }

    public static AppManager getAppManager() {
        if (instance == null) {
            instance = new AppManager();
        }
        return instance;
    }

    // 退出栈顶Activity,即结束指定的Activity
    public void finishActivity(Activity activity) {
        if (activity != null) {
            activity.finish();
            activityStack.remove(activity);
            activity = null;
        }
    }

    // 获得当前栈顶Activity
    public Activity currentActivity() {
        Activity activity = null;
        if (null != activityStack && 0 != activityStack.size()) {
            activity = activityStack.lastElement();
        }
        return activity;
    }

    // 将当前Activity推入栈中
    public void addActivity(Activity activity) {
        if (activityStack == null) {
            activityStack = new Stack<Activity>();
        }
        activityStack.add(activity);
    }


    // 将当前Activity移出栈中
    public void removeActivity(Activity activity) {
        if (activity != null) {
            activityStack.remove(activity);
        }
    }

    // 除了某个Activity,退出栈中其它所有Activity
    public void popAllActivityExceptOne(Class<?> cls) {
        if (null == activityStack || activityStack.size() == 0) {
            return;
        }
        int len = activityStack.size();
        for (int i = len - 1; i >= 0; i--) {
            Activity activity = activityStack.get(i);
            if (activity == null || (null != cls && activity.getClass().equals(cls))) {
                continue;
            }
            finishActivity(activity);
        }
    }

    // 退出栈中当前Activity
    public void popUpActivity(Class<?> cls) {
        if (null == activityStack || activityStack.size() == 0) {
            return;
        }
        int len = activityStack.size();
        for (int i = len - 1; i >= 0; i--) {
            Activity activity = activityStack.get(i);
            if (activity == null)
                continue;
            if (activity.getClass().equals(cls)) {
                finishActivity(activity);
                break;
            }
        }
    }

    /**
     * 结束所有activity
     */
    public void finishAllActivities() {

        for (Activity activity : activityStack) {
            activity.finish();
        }
        activityStack.clear();
    }

    public void gotoMainActivity(Context context) {

        popAllActivityExceptOne(IndexActivity.class);
        Intent intent = new Intent();
        intent.setAction("GO_BACK_MAIN_PAGE");
        context.sendBroadcast(intent);
    }

    public boolean isBackground(Context context) {

        ActivityManager activityManager = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
                .getRunningAppProcesses();
        for (RunningAppProcessInfo appProcess : appProcesses) {
            if (appProcess.processName.equals(context.getPackageName())) {
                if (appProcess.importance > RunningAppProcessInfo.IMPORTANCE_PERCEPTIBLE) {
//                    Log.i("后台", appProcess.processName);
                    return true;
                } else {
//                    System.out.println("appProcess.importance==" + appProcess.importance);
//                    Log.i("前台", appProcess.processName);
                    return false;
                }
            }
        }
        return true;
    }

}


4.Activity跳转工具类,带有动画

package com.example.main.utils;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

import com.example.main.R;

import java.util.Map;

/**
 * Created by MLing on 14/12/12.
 */
public class ActivityAnim {
    private static Intent intent = null;

    /**
     * @param startactivity
     * @param finshActivity Activity间跳转
     *                      实现动画
     */
    public static void intentActivityForMap(Activity startactivity, Class<?> finshActivity, Map<String, String> map) {
        if (intent == null) {
            intent = new Intent();
        }
        intent.setClass(startactivity, finshActivity);
        if (map != null) { //处理
            for (String o : map.keySet()) {
                intent.putExtra(o, map.get(o));
            }
        }
        startactivity.startActivity(intent);

        startactivity.overridePendingTransition(R.anim.left_in, R.anim.left_out);
    }

    /**
     * @param context
     * @param cls     Activity间跳转
     *                实现动画
     */
    public static void intentActivity(Context context, Class<?> cls) {
        if (intent == null) {
            intent = new Intent();
        }
        if (cls != null) {
            intent.setClass(context, cls);
        }
        context.startActivity(intent);

        ((Activity) context).overridePendingTransition(R.anim.left_in, R.anim.left_out);
    }

    /**
     * Activity间跳转,加左右动画
     *
     * @param context
     * @param cls     目标Activity
     * @param bundle  数据参数,没有参数null
     */
    public static void intentActivity(Context context, Class<?> cls, Bundle bundle) {
        if (intent == null) {
            intent = new Intent();
        }
        if (cls != null) {
            intent.setClass(context, cls);
        }
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        context.startActivity(intent);

        ((Activity) context).overridePendingTransition(R.anim.left_in, R.anim.left_out);
    }


    public static void intentActivity(Activity startactivity, Intent intent) {
        if (intent == null) {
            return;
        }
        startactivity.startActivity(intent);

        startactivity.overridePendingTransition(R.anim.left_in, R.anim.left_out);
    }

    /**
     * 设置Activity返回接收数据 配套 setResult()使用
     *
     * @param startactivity
     * @param intent
     */
    public static void startActivityForResult(Activity startactivity, Intent intent, int intentCode) {
        if (intent == null) {
            return;
        }
        startactivity.startActivityForResult(intent, intentCode);

        startactivity.overridePendingTransition(R.anim.left_in, R.anim.left_out);
    }

    public static void setResult(Activity startactivity, Intent intent, int result) {
        if (intent == null) {
            return;
        }
        startactivity.setResult(result, intent);
        startactivity.finish();

        startactivity.overridePendingTransition(R.anim.right_in, R.anim.right_out);

    }

    public static void startResultActivity(Activity startactivity, Class<?> finshActivity, Map<String, String> map, int requestCode) {
        if (intent == null) {
            intent = new Intent();
        }
        intent.setClass(startactivity, finshActivity);
        if (map != null) { //处理
            for (String o : map.keySet()) {
                intent.putExtra(o, map.get(o));
            }
        }
        startactivity.startActivityForResult(intent, requestCode);

        startactivity.overridePendingTransition(R.anim.left_in, R.anim.left_out);
    }

    /**
     * @param finshActivity 结束当前activity的动画
     */
    public static void finshActivity(Activity finshActivity) {
        finshActivity.finish();
        finshActivity.overridePendingTransition(R.anim.right_in, R.anim.right_out);
    }


//    /**
//     * @param finshActivity 结束当前程序的动画
//     */
//    public static void finshActivity(Activity finshActivity) {
//        finshActivity.finish();
//    }

    /**
     * @param finshActivity 结束当前activity的动画
     */
    public static void homeActivity(Activity finshActivity) {
        finshActivity.finish();
        finshActivity.overridePendingTransition(R.anim.left_in, R.anim.left_out);
    }

    /**
     * @param finshActivity 结束当前activity的动画
     */
    public static void popActivity(Activity finshActivity) {
        finshActivity.finish();
        finshActivity.overridePendingTransition(R.anim.slide_in_from_bottom, R.anim.slide_out_to_bottom);
    }

    /**
     * 参数序列化
     *
     * @param strings 参数
     * @return 返回序列化之后的String[]数组
     */
    public String[] initPropertys(String... strings) {
        if (strings[0].equals(""))
            return new String[0];
        return strings;
    }

    private static void intent(Intent intent, String[] key, String[] value) {
        for (int i = 0; i < key.length; i++) {
            intent.putExtra(key[i], value[i]);
        }
    }


    /**
     * @param startactivity
     * @param finshActivity Activity间跳转
     *                      实现动画
     */
    public static void intentActivityUp(Activity startactivity, Class<?> finshActivity, Map<String, String> map) {
        if (intent == null) {
            intent = new Intent();
        }
        intent.setClass(startactivity, finshActivity);
        if (map != null) { //处理
            for (String o : map.keySet()) {
                intent.putExtra(o, map.get(o));
            }
        }
        startactivity.startActivity(intent);
        startactivity.overridePendingTransition(R.anim.down_in, R.anim.down_out);
    }

    /**
     * @param finshActivity 结束当前activity的动画
     */
    public static void finshActivityDowm(Activity finshActivity) {
        finshActivity.finish();
        finshActivity.overridePendingTransition(R.anim.down_in, R.anim.down_out);
    }
}

right_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false" 
	xmlns:android="http://schemas.android.com/apk/res/android">
 	<translate android:fromXDelta="-100%" 
 		android:toXDelta="0"
		android:duration="200" />
</set>

right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false"
	xmlns:android="http://schemas.android.com/apk/res/android">

	<translate android:fromXDelta="0" 
		android:toXDelta="100%"
		android:duration="200" />
</set>

down_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false"
	xmlns:android="http://schemas.android.com/apk/res/android">
	<translate android:fromYDelta="100%"
		android:toYDelta="0"
		android:duration="400"/>
</set>

down_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false"
	xmlns:android="http://schemas.android.com/apk/res/android">
	<translate android:fromYDelta="0"
		android:toYDelta="-100%"
		android:duration="400"/>
</set>

要保证Activity切换动画一致,需要在我们点击按钮,前进,后退Activity的地方都是用这个工具类,实体键Back 来finishActivity也要有我们规定的动画

所以在BaseActivity里面重写了onBackPressed:

  @Override
    public void onBackPressed() {
        ActivityAnim.finshActivity(this);
    }











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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值