學習Android開發差不多有兩年時間了,期間也做了大大小小的一些項目。近來抽出閒暇想把Android基礎強化一下,之前在網上看到了郭霖郭大神的幾篇博客,從中受益不少。於是花了近一周時間看完了郭神的一本Android教材——《Android第一行代碼》。這本書相比其他教材個人感覺更為基礎,內容很實用。看完之後我也有一些收獲,學到了一些可以很好的運用到實際中的Android小技巧,下面從中選出我認為很有價值的地方做個記錄。同時歡迎各位指正補充~~
第一行代碼——Android(全書完整版)高清PDF+源碼 http://www.linuxidc.com/Linux/2015-05/117920.htm
很多時候當我們接手一個較為復雜的源代碼的時候,裡面會有很多個Acvitity。此時我們往往很難從中找出哪個界面對應哪個源碼,這無疑會降低我們的開發效率。下面介紹書中一個小技巧:
public class BaseActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());
}
}
個人心得:看到這裡,也許你會覺得,如果拿到一個源碼工程,然後進去一個個的改還是會很麻煩。我認為作者在這裡主要是想介紹這樣一種方法,我們在編程的時候可以考慮加入這樣一種技巧,這樣可以更好的與人合作一個項目。
大家對Intent的都很熟悉,他是Android系統的搬運工。當我們啟動一個Acivity並希望向它傳遞一些數據,這時候通常都會用到intent。
一個項目中可能會有很多個Activity都需要傳遞數據,而開發者完全有可能不確定這些Activity分別要傳遞什麼數據,這時候我們可以用一個技巧來規范這樣一種“通信協議”。
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);
}
}
這樣一來,在使用的過程中,當需要跳轉的時候可以用以下代碼
AnotherActivity.actionStart(FirstActivity.this, "val1", "val2");
個人心得:個人覺得這是一個很不錯的習慣,如果系統中帶參數的跳轉比較多就應該將跳轉全部換成統一規范,這樣可以減少合作開發中不必要的麻煩。
TableLayout是在開發中很少用到的一個布局。當然對於這個控件有幾個地方我覺得也需要注意。
android:stretchColunms="1"
屬性來指定某一列被拉伸解決(以上是指定拉伸第二列)。android:layout_span="2"
這樣一來該控件就會占2個位置。個人心得:在我所做過的項目中,尚未用過TableLayout,不過作為一個Android開發者,應該對其有一定的了解,在恰當的時候能夠很好的使用之。
我們在用listview的時候都會用到適配器,Android為我們做了兩個常用的適配器:SimpleAdapter和ArrayAdapter等,當我們有特殊要求的時候需要自定義一個適配器繼承自BaseAdapter,這樣可以更加靈活的完成我們需要的特殊功能。但其實大多時候我們可以編寫一個繼承自ArrayAdapter的適配器,這樣更加簡單:
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;
}
這樣一來,我們只需要重寫getView這樣一個方法,而如果是繼承自BaseAdapter,我們需要至少重寫4個方法。可以是我們的代碼更加簡化。
個人心得:也許這個大家都知道吧, 反正我以前都是自定義適配器繼承自BaseAdapter,然後重寫4個方法,其中3個都是用不上的。。
這裡只是想記錄一個Fragment的方法:transaction.addToBackStack(null);
<intent-filter **android:priority="50">
... ...
<intent/>
<receive/>
```在使用系統相機的過程中,我們可以通過startActivityForResult啟動相機,從而接收拍照成功與否的返回值。並且可以對拍照後的圖片進行裁剪。
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);
個人心得:這裡主要是對系統中的action的了解程度以及對action的參數的熟悉。詳見Android action大全書中的這一章主要分為兩個部分:1、通過Android系統API獲取本機位置信息;2、通過調用百度地圖顯示地圖信息。前者是Android自帶的函數,而後者需要下載百度API。
對於第一部分Android API沒有任何變化,而第二部分書中是用的百度地圖2.3版,而在我寫這篇文章的時候百度地圖最新版是3.2。很多函數已經不再適用,所以這一章的內容基本可以忽略了。大家可以按照需求照著百度文檔來學習這一部分內容:百度地圖文檔。
個人心得:雖然書上的程序已經不能使用,但是作為了解,個人覺��照著百度文檔實現書中的內容也是很有必要的,而且用起來也很簡單。至於更多復雜的高級功能大家到用到的時候在學不遲,也會學的更快一些。
好了,以上是我在讀這本書中所收獲的一些東西,坐著提供的一些小技巧如果可以運用得當,可以很好的幫助我們開發項目,提高我們的效率。今後我也會不斷加入所學的實用技巧。也歡迎大家對內容進行指正、補充。謝謝!
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11