Android 《第一行代碼》第二版 筆記

《第一行代碼》第二版是基于Android 7.0 的
guolin大神:《第二行代碼》
網(wǎng)上找到電子書資源,掃描版pdf,在百度分享:
鏈接: https://pan.baidu.com/s/1i5Gfp5b 密碼: vagx
書中的示例代碼
《第二行代碼》全書源代碼

面向初學(xué)者的書隙券,所以差不多兩天從頭到尾掃了一遍际看,記錄一下自己之前掌握有偏差和可以學(xué)習(xí)的地方岳枷。

0.細(xì)節(jié)Log和 System.out 差異 以及Action 和 catergory趣惠,需要總結(jié)

1.活動(dòng)管理器
書中寫的模式 是單獨(dú)拿出來(lái)一個(gè)類來(lái)實(shí)現(xiàn)染乌,每次打開一個(gè)Activity然后加進(jìn)去俺榆,最后退出的時(shí)候 遍歷關(guān)閉。

之前項(xiàng)目參考leader的框架粒蜈,其實(shí)可以更加省事顺献,在application 對(duì)象中定義方法 :

private static ArrayList<Activity> list = new ArrayList<Activity>();
/**
 * Activity關(guān)閉時(shí),刪除Activity列表中的Activity對(duì)象
 */
public void removeActivity(Activity a) {
    if (list.contains(a)) {
        list.remove(a);
        a = null;
    }

}

/**
 * 向Activity列表中添加Activity對(duì)象
 */
public void addActivity(Activity a) {
    if (!list.contains(a)) {
        list.add(a);
    }
}

/**
 * 關(guān)閉Activity列表中的所有Activity
 */
public void finishActivity() {
    for (Activity activity : list) {
        if (null != activity) {
            LogUtil.e("-----activity = " + activity.getClass().getName());
            activity.finish();
            activity = null;
        }
    }
    // 殺死該應(yīng)用進(jìn)程
    System.exit(0);
    // android.os.Process.killProcess(android.os.Process.myPid());
}

在定義的Baseactivity中的生命周期做相應(yīng)處理薪伏,獲取application 的單例對(duì)象進(jìn)行操作。就沒(méi)必要每打開一個(gè)Activity 添加一次粗仓。

public abstract class BaseActivity extends FragmentActivity {
    ........
  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //獲取 當(dāng)前application對(duì)象把Activity添加進(jìn)去
    AppContext.getContext().addActivity(this);
 }
 ..........

@Override
protected void onDestroy() {

  //獲取 當(dāng)前application對(duì)象把Activity移除
    AppContext.getContext().removeActivity(this);
    super.onDestroy();
 }
}

在其他地方調(diào)用嫁怀,比如點(diǎn)擊back兩次 退出應(yīng)用

  if (!isBack) {
            Toast.makeText(this, "2秒之內(nèi),再按一次退出", Toast.LENGTH_SHORT).show();
            downTime = event.getDownTime();
            isBack = true;
            return true;
        } else {
            if (event.getDownTime() - downTime <= 2000) {
                isUpdataFinish(true);
                //獲取 當(dāng)前application對(duì)象把Activity遍歷移除
               AppContext.getContext().finishActivity();
            } else {
                Toast.makeText(this, "2秒之內(nèi)借浊,再按一次退出", Toast.LENGTH_SHORT)
                        .show();
                downTime = event.getDownTime();
                return true;
            }
        }

2.定義啟動(dòng)Activity 參數(shù)塘淑。

這樣子分模塊開發(fā)相互交互直接就知道了所需參數(shù),

SecondActivity.class中定義方法

public static void actionStart(Context context,String data1,String data2){
    Intent intent = new Intent(context,SecondActivity.class);
    intent.putExtra("param1","data1");
    intent.putExtra("param2","data2");
    context.startActivity(intent);
}

FirstActivity中啟動(dòng)時(shí)

SecondActivity.actionStart(FirstActivity.this,"data1","data2");

3.Button
這個(gè)之前真的沒(méi)有留意過(guò)蚂斤,系統(tǒng)自動(dòng)會(huì)把Button的文本轉(zhuǎn)為大寫存捺。
修改 android:textAllCaps="false"即可

 <Button
        android:textAllCaps="false"
        android:id="@+id/btn_check_in"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="test" />

4.Percent Support Library
算是首次接觸這個(gè)新的支持布局

函數(shù)庫(kù),發(fā)現(xiàn)其中主要包含2個(gè)類。
PercentFrameLayout捌治、PercentRelativeLayout岗钩、PercentLayoutHelper
大部分的百分比實(shí)現(xiàn)邏輯都在PercentLayoutHelper這個(gè)類中,首先我們需要知道肖油,PercentFrameLayout兼吓、PercentRelativeLayout分貝繼承于FrameLayout、RelativeLayout森枪。原有的屬性和方法都是可以使用的视搏。同時(shí)PercentHelper還對(duì)其做了百分比布局的擴(kuò)展,在xml文件中县袱,增加了如下屬性配置浑娜。

heightPercent :百分比表示高度
widthPercent :百分比表示寬度
marginBottomPercent :百分比表示底部的間隔
marginEndPercent:百分比表示距離最后一個(gè)View之間的間隔
marginLeftPercent:百分比表示左邊的間隔
marginPercent :百分比表示View之間的間隔
marginRightPercent:百分比表示右邊的間隔
marginStartPercent:百分比表示距離第一個(gè)View之間的間隔
marginTopPercent:百分比表示頂部的間隔

隨后認(rèn)真學(xué)習(xí)。

5..9圖片的問(wèn)題

之前涉及的很少式散,知道有這個(gè)東西筋遭。在這里大概知道.9主要用于確定圖片拉伸區(qū)域和內(nèi)容區(qū)域,而mdpi杂数、hdpi宛畦、xhdpi、xxhdpi和xxxhdpi是用于適配屏幕像素密度區(qū)間揍移,保證圖片可以在不同像素密度的手機(jī)上都顯示清晰而不會(huì)過(guò)多縮放次和。
要學(xué)習(xí)如何制作.9切圖和應(yīng)用場(chǎng)景。

6.限定符那伐、最小寬度限定符
之前沒(méi)做過(guò)平板開發(fā)適配踏施,現(xiàn)在在做,也要認(rèn)真學(xué)一下罕邀。

7.廣播強(qiáng)制下線
相比第一版有更巧妙的處理畅形,在baseActivity中 定義好內(nèi)部類廣播,

public class BaseActivity extends Activity {  
 private ForceOfflineReceiver mForceOfflineReceiver ;
@Override  
protected void onResume( ) {  
    super.onResume( );  
   //注冊(cè) mForceOfflineReceiver
}  
  
@Override  
protected void onPause() {  
    super.onPause();  
      //反注冊(cè) mForceOfflineReceiver
}  
  

 class ForceOfflineReceiver extends BroadcastReceiver {  

@Override  
public void onReceive(final Context context, Intent intent) {  
    //do sth you want
  }    
}  
}  

這樣做的過(guò)程 只有在resume 的前端顯示的acivity 能激活這個(gè)廣播诉探,避免了原來(lái)在oncreat()注冊(cè) 收到一堆消息日熬。

8.通知更改呼吸燈 、增加預(yù)覽大圖
這個(gè)可以加進(jìn)去增加交互友好,之前沒(méi)有嘗試過(guò)肾胯。

2017年10月28日 15:28:51

所需權(quán)限

 <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FLASHLIGHT"/>

sample code:

  //為了版本兼容  選擇V7包下的NotificationCompat進(jìn)行構(gòu)造
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
    //Ticker是狀態(tài)欄顯示的提示
    builder.setTicker("簡(jiǎn)單Notification");
    //第一行內(nèi)容  通常作為通知欄標(biāo)題
    builder.setContentTitle("標(biāo)題");
    //第二行內(nèi)容 通常是通知正文
    builder.setContentText("通知內(nèi)容");
    //第三行內(nèi)容 通常是內(nèi)容摘要什么的 在低版本機(jī)器上不一定顯示
    builder.setSubText("這里顯示的是通知第三行內(nèi)容竖席!");
    //ContentInfo 在通知的右側(cè) 時(shí)間的下面 用來(lái)展示一些其他信息
    //builder.setContentInfo("2");
    //number設(shè)計(jì)用來(lái)顯示同種通知的數(shù)量和ContentInfo的位置一樣,如果設(shè)置了ContentInfo則number會(huì)被隱藏
    builder.setNumber(2);
    //可以點(diǎn)擊通知欄的刪除按鈕刪除
    builder.setAutoCancel(true);
    //系統(tǒng)狀態(tài)欄顯示的小圖標(biāo)
    builder.setSmallIcon(R.mipmap.ic_launcher);
    //下拉顯示的大圖標(biāo)
    builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.push));
    Intent intent = new Intent(this,SettingsActivity.class);
    PendingIntent pIntent = PendingIntent.getActivity(this,1,intent,0);
    //點(diǎn)擊跳轉(zhuǎn)的intent
    builder.setContentIntent(pIntent);
    //通知默認(rèn)的聲音 震動(dòng) 呼吸燈 
    builder.setDefaults(NotificationCompat.DEFAULT_ALL);
    Notification notification = builder.build();
    manger.notify(TYPE_Normal,notification);

顯示 下拉的大圖

   android.support.v4.app.NotificationCompat.BigPictureStyle style = new android.support.v4.app.NotificationCompat.BigPictureStyle();
    style.setBigContentTitle("BigContentTitle");
    style.setSummaryText("SummaryText");
    style.bigPicture(BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.app_icon_big));
    builder.setStyle(style);

9.多窗口模式敬肚,需要學(xué)習(xí)(可惜沒(méi)有 Android 7.0的機(jī)子 )毕荐。

問(wèn)題部分帶整理實(shí)踐解決 2017年10月21日 11:24:14

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市艳馒,隨后出現(xiàn)的幾起案子憎亚,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件第美,死亡現(xiàn)場(chǎng)離奇詭異蝶锋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)斋日,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門牲览,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人恶守,你說(shuō)我怎么就攤上這事第献。” “怎么了兔港?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵庸毫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我衫樊,道長(zhǎng)飒赃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任科侈,我火速辦了婚禮载佳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臀栈。我一直安慰自己蔫慧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布权薯。 她就那樣靜靜地躺著姑躲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盟蚣。 梳的紋絲不亂的頭發(fā)上黍析,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音屎开,去河邊找鬼阐枣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奄抽,可吹牛的內(nèi)容都是我干的蔼两。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼如孝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宪哩!你這毒婦竟也來(lái)了娩贷?” 一聲冷哼從身側(cè)響起第晰,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后茁瘦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體品抽,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年甜熔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了圆恤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腔稀,死狀恐怖盆昙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情焊虏,我是刑警寧澤淡喜,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站诵闭,受9級(jí)特大地震影響炼团,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疏尿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一瘟芝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧褥琐,春花似錦锌俱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至驱富,卻和暖如春锚赤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背褐鸥。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工线脚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叫榕。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓浑侥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晰绎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寓落,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,183評(píng)論 25 707
  • 1.什么是Activity?問(wèn)的不太多伶选,說(shuō)點(diǎn)有深度的 四大組件之一,一般的,一個(gè)用戶交互界面對(duì)應(yīng)一個(gè)activit...
    JoonyLee閱讀 5,736評(píng)論 2 51
  • Day1: 在代碼中通過(guò)R.string.hello_world可以獲得該字符串的引用史飞; 在XML中通過(guò)@stri...
    冰凝雪國(guó)閱讀 1,406評(píng)論 0 5
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,426評(píng)論 0 17
  • 如果你在乎的人問(wèn)你仰税,“你可以幫我一個(gè)忙嗎构资?”你應(yīng)該試著這樣回答他/她,“當(dāng)然可以啦陨簇,幫什么吐绵?”直接就拒絕的話無(wú)法給...
    安靜安靜閱讀 324評(píng)論 0 0