久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

手把手教你如何搭建一個自己的安卓快速開發(fā)框架之BaseActivity(一)

 放松神經(jīng) 2017-03-14

博客出自:http://blog.csdn.net/u012534831
繼上一篇博客已經(jīng)好幾個月沒發(fā)布新博客了,,中間因為教研室項目原因轉(zhuǎn)手C#幾個月,,然后又加上各種事情(再加上懶 - -,!)就落下了,并且有好多小伙伴給我留言上一篇播客的問題我都沒能解答,,在此給各位小伙伴說聲抱歉了,。 今天,又重拾安卓,,準(zhǔn)備慢慢構(gòu)建一個自己的安卓快速開發(fā)框架,,算是經(jīng)驗的總結(jié)和積累。網(wǎng)上這種東西很多,,但是對于很多初學(xué)者而言需要的是動手實踐,,與此同時,不免就有自己 的感想,,因此呢,,我也動手并分享出來和大家一起學(xué)習(xí)。


為什么我們要構(gòu)建一個BaseActivity呢,,無非因為以下兩點:

  • 1,、避免重復(fù)代碼
  • 2、統(tǒng)一管理

那么OK,,我們構(gòu)建一個自己的BaseActivity首先有什么需求呢,?

  • 1、透明狀態(tài)欄
  • 2,、生命周期監(jiān)控
  • 3,、頂部統(tǒng)一的ToolBar

這是一個簡單的Base,方便我們其他的Activity直接繼承使用,。

從上面可以看出,,我們有3個需求,那么我們都放到一個BaseActivity就OK了,,在這一個Activity寫狀態(tài)欄,、toolbar、日志,。但是,,這樣的話我們?nèi)绻硞€Activity不需要toorbar或者狀態(tài)欄了怎么辦呢?是不是又不能繼承了,。所以,,我們可以將這兩個功能拆開,,寫兩個Activity,,如果不需要其中一個功能,繼承另一個就OK了,。

經(jīng)上面分析,,我們此刻需要3個Activity,,一個SuperActivity,一個StatusActivity,一個ToolBarActivity就OK了,。

package com.android.qht.BaseActivity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.android.qht.Util.LogUtil;

public abstract class superActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentViewId());
        LogUtil.e("--->onCreate");
    }
    public abstract int getContentViewId();

    @Override
    protected void onStart() {
        super.onStart();
        LogUtil.e("--->onStart");
    }

    @Override
    protected void onStop() {
        super.onStop();
        LogUtil.e("--->onStop");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        LogUtil.e("--->onRestart");
    }
    @Override
    protected void onPause(){
        super.onPause();
        LogUtil.e("--->onpause");
    }
    @Override
    protected void onResume() {
        super.onResume();
        LogUtil.e("--->onResume");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        LogUtil.e("--->onDestroy");
    }
}

這兒我用了一個日志工具類,,先不管。

先看下我們的superActivity

1,、重寫了所有的生命周期,,加上了日志監(jiān)控

      保證我們實時監(jiān)控Activity的生命周期,這很必要,,并且我們還可以在生命周期中加入butterKnife等的綁定和解綁等操作,。

2、重寫setContentView()方法,,并加入了getContentViewId()抽象方法

    重寫這個方法保證每次初始化布局時傳入我們子Activity的布局ID,,然后這個抽象方法強(qiáng)制子類重寫,傳入布局ID,,SonActivity->ToolBarActivity->SuperActivity,,這樣就保證了我們的每個界面只聽從一個布局,而不是摻雜了父類Activity的布局,。

OK,,下來再看下我們的statusActivity:

package com.android.qht.BaseActivity;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.LinearLayout;
import com.android.qht.myandroid.R;

public abstract class statusActivity extends superActivity {


    private View statusView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setstatusColor(this, getResources().getColor(R.color.colorPrimary));//和toolbar一個顏色
    }

    /**
     * 設(shè)置狀態(tài)欄顏色
     *
     * @param activity 需要設(shè)置的activity
     * @param color    狀態(tài)欄顏色值
     */
    public void setstatusColor(Activity activity, int color) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // 設(shè)置狀態(tài)欄透明
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            // 生成一個狀態(tài)欄大小的矩形

            // 添加 statusView 到布局中
            ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();

            if (statusView != null) {
                decorView.removeView(statusView);
            }
            statusView = createStatusView(activity, color);
            decorView.addView(statusView);
            // 設(shè)置根布局的參數(shù)
            ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
            rootView.setFitsSystemWindows(true);
            rootView.setClipToPadding(true);
        }
    }

    /**
     * 生成一個和狀態(tài)欄大小相同的矩形條
     *
     * @param activity 需要設(shè)置的activity
     * @param color    狀態(tài)欄顏色值
     * @return 狀態(tài)欄矩形條
     */
    private View createStatusView(Activity activity, int color) {
        // 獲得狀態(tài)欄高度
        int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
        int statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId);

        // 繪制一個和狀態(tài)欄一樣高的矩形
        View statusView = new View(activity);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                statusBarHeight);
        statusView.setLayoutParams(params);
        statusView.setBackgroundColor(color);
        return statusView;
    }


    /**
     * 提供remove方法,在不需要狀態(tài)欄時可以移除
     */
    public void removeView(Activity activity) {
        ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
        if (statusView != null) {
            decorView.removeView(statusView);
        }
      }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143

在這個Activity中,,我們在子類傳遞的布局上面添加了一個頭部狀態(tài)欄,,顏色和ToolBar一樣。先別著急,,再看一下我們的ToolBarActivity:

package com.android.qht.BaseActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.android.qht.Util.ToastUtil;
import com.android.qht.myandroid.R;

/**
 * ToolBar Activity.
 */
public abstract class ToolBarActivity extends statusActivity {
    private TextView mToolbarTitle;
    private TextView mToolbarSubTitle;
    private Toolbar mToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
         /*
          toolbar.setLogo(R.mipmap.ic_launcher);
          toolbar.setTitle("Title");
          toolbar.setSubtitle("Sub Title");
          */
        mToolbarTitle = (TextView) findViewById(R.id.toolbar_title);
        mToolbarSubTitle = (TextView) findViewById(R.id.toolbar_subtitle);
        if (mToolbar != null) {
            //將Toolbar顯示到界面
            setSupportActionBar(mToolbar);
        }
        if (mToolbarTitle != null) {
            //getTitle()的值是activity的android:lable屬性值
            mToolbarTitle.setText(getTitle());
            //設(shè)置默認(rèn)的標(biāo)題不顯示
            getSupportActionBar().setDisplayShowTitleEnabled(false);
        }

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_tool_bar, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
            case R.id.action_item1:
                ToastUtil.showToastShort("回到首頁");
                break;
            case R.id.action_item2:
                ToastUtil.showToastShort("分享");
                break;
            case R.id.action_item3:
                ToastUtil.showToastShort("掃一掃");
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }
    @Override
    protected void onStart() {
        super.onStart();
        /**
         * 判斷是否有Toolbar,并默認(rèn)顯示返回按鈕
         */
        if(null != getToolbar() && isShowBacking()){
            showBack();
        }
    }

    /**
     * 獲取頭部標(biāo)題的TextView
     * @return
     */
    public TextView getToolbarTitle(){
        return mToolbarTitle;
    }
    /**
     * 獲取頭部副標(biāo)題的TextView
     * @return
     */
    public TextView getSubTitle(){
        return mToolbarSubTitle;
    }

    /**
     * 設(shè)置頭部標(biāo)題
     * @param title
     */
    public void setToolBarTitle(CharSequence title) {
        if(mToolbarTitle != null){
            mToolbarTitle.setText(title);
        }else{
            getToolbar().setTitle(title);
            setSupportActionBar(getToolbar());
        }
    }

    /**
     * this Activity of tool bar.
     * 獲取頭部.
     * @return support.v7.widget.Toolbar.
     */
    public Toolbar getToolbar() {
        return (Toolbar) findViewById(R.id.toolbar);
    }

    /**
     * 版本號小于21的后退按鈕圖片
     */
    private void showBack(){
        //setNavigationIcon必須在setSupportActionBar(toolbar);方法后面加入
        getToolbar().setNavigationIcon(R.mipmap.back);
        getToolbar().setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }

    /**
     * 是否顯示后退按鈕,默認(rèn)顯示,可在子類重寫該方法.
     * @return
     */
    protected boolean isShowBacking(){
        return true;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135

我們在ToorBarActivity中寫了ToorBar的實現(xiàn),,因為我們的ToolBar是include方式加入到子Activity中的,所以我們是按照正常的方式初始化ToolBar并寫了它的一些方法,。

最終我們的加載順序是這樣的:

1,、先加載子Activity的Layout(包括ToolBar)
2、再加載頂部狀態(tài)欄
3,、再初始化ToolBar(findviewbyid)
4,、再初始化其他控件(findviewbyid)

總體的過程就是這樣,我這個BaseActivity比較簡單,,只是幫助入門者建立一個這樣的構(gòu)建思想,,建立自己的框架概念和體系。

下一篇我會帶大家一起封裝一些常用的工具類+ButterKnife+retrofit+RXJava,,敬請期待,。

csdn地址:http://blog.csdn.net/u012534831
github地址:https://github.com/qht1003077897
QQ:1003077897

歡迎交流。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多