《Android第一行代碼》筆記

學(xué)習(xí)Android開發(fā)差不多有兩年時(shí)間了泽论,期間也做了大大小小的一些項(xiàng)目夺蛇。近來(lái)抽出閑暇想把Android基礎(chǔ)強(qiáng)化一下步做,之前在網(wǎng)上看到了郭霖郭大神的幾篇博客副渴,從中受益不少。于是花了近一周時(shí)間看完了郭神的一本Android教材——《Android第一行代碼》全度。這本書相比其他教材個(gè)人感覺更為基礎(chǔ)煮剧,內(nèi)容很實(shí)用〗遥看完之后我也有一些收獲勉盅,學(xué)到了一些可以很好的運(yùn)用到實(shí)際中的Android小技巧,下面從中選出我認(rèn)為很有價(jià)值的地方做個(gè)記錄咨堤。同時(shí)歡迎各位指正補(bǔ)充~~

1菇篡、查看當(dāng)前界面處于哪個(gè)Activity漩符。

很多時(shí)候當(dāng)我們接手一個(gè)較為復(fù)雜的源代碼的時(shí)候一喘,里面會(huì)有很多個(gè)Acvitity。此時(shí)我們往往很難從中找出哪個(gè)界面對(duì)應(yīng)哪個(gè)源碼,這無(wú)疑會(huì)降低我們的開發(fā)效率凸克。下面介紹書中一個(gè)小技巧:

  1. 編寫一個(gè)新Activity如BaseActivity去繼承Activity议蟆,代碼如下:
public  class  BaseActivity extends Activity
{
           @Override
           protected void onCreate(Bundle savedInstanceState)
           {
                        super.onCreate(savedInstanceState);
                        Log.d("BaseActivity", getClass().getSimpleName());
           }
}
  1. 讓工程里所有的Activity都繼承自BaseActivity;
  2. 點(diǎn)擊進(jìn)入你想查看代碼的界面萎战,同時(shí)觀察LogCat中的輸出咐容,打印出的信息就是相應(yīng)的Activity的類名了。

個(gè)人心得:看到這里蚂维,也許你會(huì)覺得戳粒,如果拿到一個(gè)源碼工程,然后進(jìn)去一個(gè)個(gè)的改還是會(huì)很麻煩虫啥。我認(rèn)為作者在這里主要是想介紹這樣一種方法蔚约,我們?cè)诰幊痰臅r(shí)候可以考慮加入這樣一種技巧,這樣可以更好的與人合作一個(gè)項(xiàng)目涂籽。

2苹祟、當(dāng)啟動(dòng)一個(gè)需要傳遞數(shù)據(jù)的Activity時(shí),避免參數(shù)混淆评雌。

大家對(duì)Intent的都很熟悉树枫,他是Android系統(tǒng)的搬運(yùn)工。當(dāng)我們啟動(dòng)一個(gè)Acivity并希望向它傳遞一些數(shù)據(jù)景东,這時(shí)候通常都會(huì)用到intent砂轻。
一個(gè)項(xiàng)目中可能會(huì)有很多個(gè)Activity都需要傳遞數(shù)據(jù),而開發(fā)者完全有可能不確定這些Activity分別要傳遞什么數(shù)據(jù)斤吐,這時(shí)候我們可以用一個(gè)技巧來(lái)規(guī)范這樣一種“通信協(xié)議”舔清。

public class AnotherActivity extends BaseActivity
{
        public static void actionStart(Context context,String val1,String val2)
        {
                  Intent intent = new Intent(context, AnotherActivity.class);
                  intent.putExtra("val1", val1);
                  intent.putExtra("val2", val2);
                  context.startActivity(intent);
        }
}

這樣一來(lái),在使用的過程中曲初,當(dāng)需要跳轉(zhuǎn)的時(shí)候可以用以下代碼

AnotherActivity.actionStart(FirstActivity.this, "val1", "val2");

個(gè)人心得:個(gè)人覺得這是一個(gè)很不錯(cuò)的習(xí)慣体谒,如果系統(tǒng)中帶參數(shù)的跳轉(zhuǎn)比較多就應(yīng)該將跳轉(zhuǎn)全部換成統(tǒng)一規(guī)范,這樣可以減少合作開發(fā)中不必要的麻煩臼婆。

3抒痒、TableLayout的使用

TableLayout是在開發(fā)中很少用到的一個(gè)布局。當(dāng)然對(duì)于這個(gè)控件有幾個(gè)地方我覺得也需要注意颁褂。

  • TableRow標(biāo)簽(TableLayout的一行)中的控件是不能指定寬度的故响。
  • 正由于TableRow不能設(shè)置寬度當(dāng)需要布局自動(dòng)拉伸寬度時(shí),可以通過在TableLayout標(biāo)簽下設(shè)置
android:stretchColunms="1"

屬性來(lái)指定某一列被拉伸解決(以上是指定拉伸第二列)颁独。

  • 當(dāng)某一行少一列數(shù)據(jù)的時(shí)候彩届,最后會(huì)多出一列的空白。如果希望系統(tǒng)自動(dòng)拉伸空間占滿這一行誓酒,可以在當(dāng)前行的某個(gè)控件標(biāo)簽下設(shè)置:
android:layout_span="2"

這樣一來(lái)該控件就會(huì)占2個(gè)位置樟蠕。

個(gè)人心得:在我所做過的項(xiàng)目中贮聂,尚未用過TableLayout,不過作為一個(gè)Android開發(fā)者寨辩,應(yīng)該對(duì)其有一定的了解吓懈,在恰當(dāng)?shù)臅r(shí)候能夠很好的使用之。

4靡狞、自定義繼承ArrayAdapter的適配器

我們?cè)谟胠istview的時(shí)候都會(huì)用到適配器耻警,Android為我們做了兩個(gè)常用的適配器:SimpleAdapter和ArrayAdapter等,當(dāng)我們有特殊要求的時(shí)候需要自定義一個(gè)適配器繼承自BaseAdapter甸怕,這樣可以更加靈活的完成我們需要的特殊功能甘穿。但其實(shí)大多時(shí)候我們可以編寫一個(gè)繼承自ArrayAdapter的適配器,這樣更加簡(jiǎn)單:

public class MCAdapter extends ArrayAdapter<Fruit>
 {

    private int resourceId;

    public FruitAdapter(Context context, int textViewResourceId,
            List<Fruit> objects) {
        super(context, textViewResourceId, objects);
        resourceId = textViewResourceId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ... ...
        return view;
    }

這樣一來(lái)梢杭,我們只需要重寫getView這樣一個(gè)方法扒磁,而如果是繼承自BaseAdapter,我們需要至少重寫4個(gè)方法式曲》镣校可以是我們的代碼更加簡(jiǎn)化。
個(gè)人心得:也許這個(gè)大家都知道吧吝羞, 反正我以前都是自定義適配器繼承自BaseAdapter兰伤,然后重寫4個(gè)方法,其中3個(gè)都是用不上的钧排。敦腔。

5、Fragment回退棧

這里只是想記錄一個(gè)Fragment的方法:transaction.addToBackStack(null);

6恨溜、Broadcast Receiver

  • 廣播接收器類中不允許開啟線程
  • 發(fā)送有序廣播:sendOrderedBroadcast
  • 在廣播接收器中注冊(cè)有序廣播優(yōu)先級(jí):
              <intent-filter **android:priority="50">
              ... ...
              <intent/>
      <receive/>
  • 阻止廣播:abortBroadcast();
  • 本地廣播:LocalBroadcastManager.sendBroadcast(intent);(無(wú)法用靜態(tài)注冊(cè)方式)
    個(gè)人心得:廣播接收器是很常用的符衔。其中有序廣播的優(yōu)先級(jí)由應(yīng)用自己來(lái)定這一點(diǎn)讓我很詫異,那豈不是又給了應(yīng)用程序漏洞可鉆糟袁?在以前應(yīng)用程序要攔截短信都是通過設(shè)置更高的廣播優(yōu)先級(jí)判族,然后阻斷廣播來(lái)實(shí)現(xiàn),但是在Android4.4之后项戴,加入了默認(rèn)短信管理功能形帮,這使得用戶來(lái)決定誰(shuí)來(lái)管理短信、電話本等等周叮”绯牛看來(lái)谷歌也發(fā)現(xiàn)了這個(gè)潛在的問題。

7仿耽、調(diào)用系統(tǒng)相機(jī)

在使用系統(tǒng)相機(jī)的過程中合冀,我們可以通過startActivityForResult啟動(dòng)相機(jī),從而接收拍照成功與否的返回值项贺。并且可以對(duì)拍照后的圖片進(jìn)行裁剪君躺。

  • 啟動(dòng)相機(jī)拍照:
Intent intent = new intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);
  • 拍照完成后裁剪:
Intent intent = new intent("android.media.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO);

個(gè)人心得:這里主要是對(duì)系統(tǒng)中的action的了解程度以及對(duì)action的參數(shù)的熟悉峭判。詳見Android action大全

8、Android位置服務(wù)

書中的這一章主要分為兩個(gè)部分:1晰洒、通過Android系統(tǒng)API獲取本機(jī)位置信息;2啥箭、通過調(diào)用百度地圖顯示地圖信息谍珊。前者是Android自帶的函數(shù),而后者需要下載百度API急侥。
對(duì)于第一部分Android API沒有任何變化砌滞,而第二部分書中是用的百度地圖2.3版,而在我寫這篇文章的時(shí)候百度地圖最新版是3.2坏怪。很多函數(shù)已經(jīng)不再適用贝润,所以這一章的內(nèi)容基本可以忽略了。大家可以按照需求照著百度文檔來(lái)學(xué)習(xí)這一部分內(nèi)容:百度地圖文檔铝宵。

個(gè)人心得:雖然書上的程序已經(jīng)不能使用打掘,但是作為了解,個(gè)人覺得照著百度文檔實(shí)現(xiàn)書中的內(nèi)容也是很有必要的鹏秋,而且用起來(lái)也很簡(jiǎn)單尊蚁。至于更多復(fù)雜的高級(jí)功能大家到用到的時(shí)候在學(xué)不遲,也會(huì)學(xué)的更快一些侣夷。

好了横朋,以上是我在讀這本書中所收獲的一些東西,坐著提供的一些小技巧如果可以運(yùn)用得當(dāng)百拓,可以很好的幫助我們開發(fā)項(xiàng)目琴锭,提高我們的效率。今后我也會(huì)不斷加入所學(xué)的實(shí)用技巧衙传。也歡迎大家對(duì)內(nèi)容進(jìn)行指正决帖、補(bǔ)充。謝謝蓖捶!

                                                                                                                       ——超低空
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末古瓤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腺阳,更是在濱河造成了極大的恐慌落君,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亭引,死亡現(xiàn)場(chǎng)離奇詭異绎速,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)焙蚓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門纹冤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)洒宝,“玉大人,你說(shuō)我怎么就攤上這事萌京⊙愀瑁” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵知残,是天一觀的道長(zhǎng)靠瞎。 經(jīng)常有香客問我,道長(zhǎng)求妹,這世上最難降的妖魔是什么乏盐? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮制恍,結(jié)果婚禮上父能,老公的妹妹穿的比我還像新娘。我一直安慰自己净神,他們只是感情好何吝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹃唯,像睡著了一般岔霸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俯渤,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天呆细,我揣著相機(jī)與錄音,去河邊找鬼八匠。 笑死絮爷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梨树。 我是一名探鬼主播坑夯,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抡四!你這毒婦竟也來(lái)了柜蜈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤指巡,失蹤者是張志新(化名)和其女友劉穎淑履,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藻雪,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秘噪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勉耀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片指煎。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蹋偏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出至壤,到底是詐尸還是另有隱情威始,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布像街,位于F島的核電站黎棠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宅广。R本人自食惡果不足惜葫掉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一些举、第九天 我趴在偏房一處隱蔽的房頂上張望跟狱。 院中可真熱鬧,春花似錦户魏、人聲如沸驶臊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)关翎。三九已至,卻和暖如春鸠信,著一層夾襖步出監(jiān)牢的瞬間纵寝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工星立, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爽茴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓绰垂,卻偏偏與公主長(zhǎng)得像室奏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劲装,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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