個人經(jīng)驗(yàn)談啊,希望對你有幫助。
在網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計過程中,需要針對客戶的行業(yè)特點(diǎn)、產(chǎn)品特性、目標(biāo)受眾和市場情況進(jìn)行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計方向。創(chuàng)新互聯(lián)還需要根據(jù)客戶的需求進(jìn)行功能模塊的開發(fā)和設(shè)計,包括內(nèi)容管理、前臺展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計和安全保護(hù)等功能。
找一套比較基礎(chǔ)的android教程,看幾個例子。
看3天左右,就可以開始自己寫一些小應(yīng)用,比如短信啊,音樂播放器之類的。
在寫這些小應(yīng)用的時,必然會遇到很多問題,首先百度查看別人的解決方案,百度的方案很多很雜,需要自己實(shí)踐過濾。也可以查看google官方文檔,初學(xué)者不建議參考官方原版文檔,全英文的看起來很頭疼。
完成一些小項(xiàng)目的開發(fā)以后可以嘗試一些大項(xiàng)目的開發(fā),靈活運(yùn)用所學(xué)的知識點(diǎn)。
學(xué)習(xí)android體系架構(gòu),為什么最后再學(xué)習(xí)體系架構(gòu)呢,這里我們要想清楚的理解android的架構(gòu),需要更深層次的代碼積累才能夠更好地理解android的體系結(jié)構(gòu)。
至此,時間大概在1年左右。能夠做到精通android應(yīng)用開發(fā)
環(huán)境搭建就不講了,直接說開發(fā)。
小鬧鐘程序開發(fā)中的要點(diǎn)就是:
1、時間選擇對話框(TimePicker)
2、獲取鬧鐘管理器并對其進(jìn)行設(shè)置
3、注冊廣播接收器
掌握了這兩點(diǎn),寫程序就很簡單了。
1、新建android項(xiàng)目:Alarm,sdk版本選擇2.2,Package name:com.lql.activity,Main Activity:Alarm
2、編寫界面:直接修改layout中的main.xml文件,代碼如下:
Xml代碼
?xml?version="1.0"?encoding="utf-8"?
LinearLayout?xmlns:android=""
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
Button
android:id="@+id/timeBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/time"
android:textSize="20sp"
/
Button
android:id="@+id/cancelAlarmBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/cancelAlarm"
/
/LinearLayout
界面的效果如下:
3、修改Alarm.java這個activity,在該Activity中需要做這樣幾件事:
獲取界面上的兩個按鈕組件,并給其綁定事件監(jiān)聽器
第一個時間按鈕,點(diǎn)擊后,顯示時間選擇對話框(TimePicker),供選擇小時和分鐘,并設(shè)置鬧鐘
第二個按鈕,點(diǎn)擊之后需要當(dāng)前設(shè)定的鬧鐘
比較難寫的代碼就是鬧鐘設(shè)置:
//設(shè)置時間
Java代碼??
timeBtn.setOnClickListener(new?Button.OnClickListener(){
@Override
public?void?onClick(View?arg0)?{
Log.d(TAG,?"click?the?time?button?to?set?time");
calendar.setTimeInMillis(System.currentTimeMillis());
new?TimePickerDialog(Alarm.this,new?TimePickerDialog.OnTimeSetListener()?{
@Override
public?void?onTimeSet(TimePicker?arg0,?int?h,?int?m)?{
//更新按鈕上的時間
timeBtn.setText(formatTime(h,m));
//設(shè)置日歷的時間,主要是讓日歷的年月日和當(dāng)前同步
calendar.setTimeInMillis(System.currentTimeMillis());
//設(shè)置日歷的小時和分鐘
calendar.set(Calendar.HOUR_OF_DAY,?h);
calendar.set(Calendar.MINUTE,?m);
//將秒和毫秒設(shè)置為0
calendar.set(Calendar.SECOND,?0);
calendar.set(Calendar.MILLISECOND,?0);
//建立Intent和PendingIntent來調(diào)用鬧鐘管理器
Intent?intent?=?new?Intent(Alarm.this,AlarmReceiver.class);
PendingIntent?pendingIntent?=?PendingIntent.getBroadcast(Alarm.this,?0,?intent,?0);
//獲取鬧鐘管理器
AlarmManager?alarmManager?=?(AlarmManager)getSystemService(ALARM_SERVICE);
//設(shè)置鬧鐘
alarmManager.set(AlarmManager.RTC_WAKEUP,?calendar.getTimeInMillis(),?pendingIntent);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,?calendar.getTimeInMillis(),?10*1000,?pendingIntent);
Toast.makeText(Alarm.this,?"設(shè)置鬧鐘的時間為:"+String.valueOf(h)+":"+String.valueOf(m),?Toast.LENGTH_SHORT).show();
Log.d(TAG,?"set?the?time?to?"+formatTime(h,m));
}
},calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true).show();
}
});
代碼里面有注釋,這里就不多解釋了,其中new TimePickerDialog為創(chuàng)建時間選擇對話框。為了能夠看到效果,我給鬧鐘添加了重復(fù)提醒:alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10*1000, pendingIntent);。
還要為取消鬧鐘按鈕添加事件監(jiān)聽器:
Java代碼??
//取消鬧鐘按鈕事件監(jiān)聽
final?Button?cancelAlarmBtn?=?(Button)findViewById(R.id.cancelAlarmBtn);
cancelAlarmBtn.setOnClickListener(new?Button.OnClickListener(){
@Override
public?void?onClick(View?arg0)?{
Intent?intent?=?new?Intent(Alarm.this,AlarmReceiver.class);
PendingIntent?pendingIntent?=?PendingIntent.getBroadcast(Alarm.this,?0,?intent,?0);
//獲取鬧鐘管理器
AlarmManager?alarmManager?=?(AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Toast.makeText(Alarm.this,?"鬧鐘已經(jīng)取消!",?Toast.LENGTH_SHORT).show();
}
});
在點(diǎn)擊取消鬧鐘按鈕時,取消之前設(shè)置的鬧鐘,核心代碼就4行。
4、編寫廣播接收器,用來接收鬧鐘的廣播事件,然后進(jìn)行相關(guān)處理,
Java代碼??
public?class?AlarmReceiver?extends?BroadcastReceiver?{
/*?(non-Javadoc)
*?@see?android.content.BroadcastReceiver#onReceive(android.content.Context,?android.content.Intent)
*/
@Override
public?void?onReceive(Context?arg0,?Intent?data)?{
Log.d(Alarm.TAG,?"the?time?is?up,start?the?alarm...");
Toast.makeText(arg0,?"鬧鐘時間到了!",?Toast.LENGTH_SHORT).show();
}
}
這個代碼就很簡單了,主要是要繼 承?BroadcastReceiver 這個類,然后重寫onRecive方法。onRecive方法在鬧鐘的時間達(dá)到之后會執(zhí)行,在這里我們可以做自己的事情,比如啟動某個程序,或者播放鈴聲,我這里就是簡單的提示一下,使用的是Toast。
5、在android的AndroidManifest.xml文件中注冊廣播接收器:
manifest xmlns:android=""
Xml代碼
package="com.ql.activity"
android:versionCode="1"
android:versionName="1.0"
application?android:icon="@drawable/icon"?android:label="@string/app_name"
receiver?android:name=".AlarmReceiver"?android:process=":remote"?/
activity?android:name=".Alarm"
android:label="@string/app_name"
intent-filter
action?android:name="android.intent.action.MAIN"?/
category?android:name="android.intent.category.LAUNCHER"?/
/intent-filter
/activity
/application
uses-sdk?android:minSdkVersion="8"?/
/manifest
核心的配置為receiver android:name=".AlarmReceiver" android:process=":remote" /,這也是鬧鐘程序的關(guān)鍵,如果不做這個配置,那么時間到了之后,鬧鐘將不會提示。
接下來就是到模擬器上測試,運(yùn)行截圖如上圖。程序源代碼見附件。
Android studio作為面市不久的安卓開發(fā)工具,越來越受到大家的喜愛,這里我將介紹如何在Android studio中創(chuàng)建一個APP項(xiàng)目,并在以后經(jīng)驗(yàn)中介紹其他有關(guān)Android studio的操作和編程方法。
工具/原料
Android studio
方法/步驟
1
打開軟件,在菜單中選擇file-》new project打開創(chuàng)建向?qū)А?/p>
2
配置項(xiàng)目,確定各個名稱和存放項(xiàng)目存放路徑;
Application name:項(xiàng)目名稱
Company Domain:公司域名
Package name:app打包名稱
project location:存放路徑
最好將名稱中的examples去掉。
3
接下來設(shè)定兼容的安卓的最小版本,這依情況而定,我這里設(shè)定為安卓2.3版本。
4
如果不確定各個版本的區(qū)別,可以點(diǎn)擊“help me choose”,在打開的窗口中介紹了各個安卓版本的功能。
步驟閱讀
5
確定后最小兼容版本后,選擇項(xiàng)目的活動類型,這里有很多現(xiàn)成的模板可以使用,對于初學(xué)者選擇默認(rèn)的Blank Activity即可。
6
接下來設(shè)定活動名稱,界面布局的名稱,以及界面標(biāo)題,最后點(diǎn)擊finish完成項(xiàng)目的創(chuàng)建。
7
創(chuàng)建完后,在項(xiàng)目名-》app-》src-》main-》res-》layout下雙擊xml文件就是打開活動界面設(shè)計窗口了。
注意事項(xiàng)
注意根據(jù)情況合理選擇安卓的最小兼容版本
Android studio教程 (共6篇)
微信小程序近期可謂是動作頻出,僅最近新增的能力就有:
種種跡象表明,微信對小程序的期望值是很大,所以在它推出的幾個月效果沒到達(dá)預(yù)期的情況下,之前的很多『克制』也就逐漸變成『放肆』了 —— 不過不管小程序以后的發(fā)展到底怎樣,對我們開發(fā)者來發(fā),多了解一些總是沒有壞處的。
他山之石,可以攻玉。
對于是技術(shù)人來說,多了解一些不同的技術(shù)、不同的開發(fā)模式、不同的架構(gòu)思想,提高技術(shù)『廣度』,對于自己的成長是十分必要的。
所以,本文就是從一個 Android 開發(fā)者的角度,從項(xiàng)目工程方便切入,來分析一下『微信小程序』跟『Android App』開發(fā)上的一些異同。
『微信小程序』開發(fā)是一個相對較新的技術(shù),希望通過本文,能讓你對它多一些了解。
因?yàn)閮?nèi)容是從Android開發(fā)的角度來談的,所以我假設(shè)你已經(jīng)對 Android 開發(fā)比較熟悉了。并且對微信小程序的開發(fā)也比較感興趣,如果要是再能有些 javascript、css 的基礎(chǔ)的話那就更好了!
Android 開發(fā)我們已經(jīng)比較熟悉——
作為對比,進(jìn)行微信小程序開發(fā)所用的語言是這些——
wxml (WeiXin Markup Language) 基本約等于是 xml。微信之所以沒有直接使用 xml ,可能是為了以后擴(kuò)展方便一些(野心很大)。
同理, wxss (WeiXin Style Sheets) 基本約等于是 css。也是微信擴(kuò)展了一些功能,比如統(tǒng)一的尺寸單位 rpx 。
對于 Android 來說,對于頁面的描述基本上在 xml 中定義的,比如:
這是一個簡單的典型的示例,這個文件就是描述了兩部分內(nèi)容:
some.wxss:
很明顯可以看出:wxml 是負(fù)責(zé)了 頁面結(jié)構(gòu) 的展示;而 wxss 則負(fù)責(zé)了對 頁面樣式 的定義。
這種把結(jié)構(gòu)和樣式分離的做法,其實(shí)是延續(xù)了網(wǎng)頁開發(fā)中的習(xí)慣(html + css)。
這樣做的好處起碼有兩個:
——看起來還是挺簡單的結(jié)構(gòu):
這三個文件用以描述小程序 app 相關(guān)的內(nèi)容,他們的命名是固定這樣的,位置也固定是在根目錄下。
app.js 基本相當(dāng)于 Android 中的 Application 類,文件中主要是有一個 App() 函數(shù),來進(jìn)行小程序的初始化操作。
app.json 的作用跟 Android 中的 AndroidMainifest.xml 文件很相似 —— 都是靜態(tài)化的配置文件。
app.wxss 定義全局的樣式 —— 其定義的樣式會作用于每個頁面。比如在 app.wxss 中加入:
就可以給所有的 text 控件添加 5px 的 padding 。
當(dāng)然,頁面本身的 xxPage.wxss 可以定義局部樣式來覆蓋全局樣式。
根目錄下的 utils 文件夾中有一個 util.js 文件,這個故名思意,是類似于 Java 中的一些工具類的存在。
utils 文件夾其實(shí)是一個非必須的結(jié)構(gòu),而它之所以出現(xiàn)在官方的 HelloWorld 工程中,是作為一個代表,表明了開發(fā)者在這里是可以自定義新的文件夾和結(jié)構(gòu)的。微信小程序作為一個使用 js 來開發(fā)的平臺,是可以使用許多第三方的 js 庫的,對于這些第三方庫,以及其他的圖片資源等,都可以放到自定義的文件夾中。
pages 文件夾下包含兩個子目錄:index 和 logs ,兩個目錄的結(jié)構(gòu)都是基本一樣的,都是包含四個相同主名稱的文件: xx.js、xx.wxml、xx.json、xx.wxss 這幾個文件。
這樣的一個典型結(jié)構(gòu)表明它是一個小程序的頁面,四個文件的作用分別是:
在視圖的動態(tài)顯示上,微信小程序使用了 數(shù)據(jù)綁定(data-binding) 的方式。
如果你之前使用過 AngularJS 或者 Vue.js 等這些流行的 js 框架,那么你肯定對 數(shù)據(jù)綁定 并不陌生。它是一種把一個控件的屬性綁定到某個數(shù)據(jù)對象(view-model)的屬性的方法,這樣在改變數(shù)據(jù)對象屬性的時候,所對應(yīng)的控件屬性也就會相應(yīng)變化 —— 在開發(fā)中,這種方式會使得對 View 層的顯示控制變得十分簡單、自然。
基于此,軟件工程的流行架構(gòu)方式也在之前的 MVC 、 MVP 之外,又多了一個 —— MVVM(Model-View-ViewModel) 。
數(shù)據(jù)綁定 這種方式現(xiàn)在是如此的流行,以致于 Android 官方都出了一個 [Data Binding Library] ( ) 來支持?jǐn)?shù)據(jù)綁定,但是由于成熟度等原因,目前還并沒有成為主流,Android 中的主流視圖顯示方式,還是通過開發(fā)者手動給每個控件 set 數(shù)據(jù)。
—— 單從這一點(diǎn)上看,微信小程序的開發(fā)模式是比原生 Andorid 要『先進(jìn)』一些的~ ????
小程序雖然是和前端 H5 頁面一樣是用 js 來開發(fā),但是由于它最終運(yùn)行的平臺不再是瀏覽器,而是和 App 的表現(xiàn)幾無二致,所以頁面的生命周期也是和 App 差不多的。
一個小程序頁面的典型生命周期如下:
對比一下 Android 的 Activity 生命周期 :
微信小程序的頁面生命周期稍微簡單一些,但主要的思想跟 Activity 生命周期基本是一致的。
小程序的官方 IDE 是微信自己出品 微信Web開發(fā)者工具 ,它內(nèi)置了一個小程序的運(yùn)行環(huán)境,本質(zhì)上是基于 Chrome 內(nèi)核的一個瀏覽器框架,算是一個模擬器了。
——它雖然跟 Android 的各種高大上的模擬器相比起來略顯簡陋,但是基本該有的功能也基本都有(斷點(diǎn)、Log、網(wǎng)絡(luò)監(jiān)控等),而且由于是基于瀏覽器內(nèi)核的頁面 DOM 解析,所以運(yùn)行的速度也是像瀏覽器打開網(wǎng)頁一樣流暢,不會像 Android 模擬器那樣對系統(tǒng)資源要求很高。
另外,在綁定了開發(fā)者賬號之后,也可以用手機(jī)進(jìn)行真機(jī)調(diào)試來調(diào)試小程序,所以也能在上線前用不同的機(jī)器來進(jìn)行充分的兼容性測試。
總體來說,小程序作為一個新的形態(tài),從開發(fā)的角度,它可以算作是一個【Native開發(fā)】和【H5開發(fā)】的結(jié)合,它吸收了原生開發(fā)和 H5 開發(fā)的優(yōu)點(diǎn)。對于前端開發(fā)人員和原生開發(fā)人員來說,都可以在微信小程序中找到許多熟悉的東西。再細(xì)節(jié)的許多點(diǎn)這里就不在贅述了,大家如果有興趣,可以自己上手去體驗(yàn)一下。
綜上,自然也就有兩種人特別適合去做小程序的開發(fā)——H5的前端開發(fā)人員,以及之前的 Android/iOS 原生 App 開發(fā)者。
微信小程序的開發(fā)總體來說是很簡單的。
—— 對于前端開發(fā)者來說,了解一下原生 App 的一些相關(guān)思想即可,這些工作其實(shí)只要讀一遍小程序的開發(fā)者指南基本就差不多了。
—— 而對于原生開發(fā)者來說,只要稍微補(bǔ)一下 js 的相關(guān)知識(html/css),也基本就差不多可以上手去做了。如果你之前恰好已經(jīng)有過一些 js 的使用經(jīng)驗(yàn),那就不用多說了,花半個小時看一下小程序的文檔,直接上!
關(guān)于作者 :