安卓日記app
發(fā)布時間:2017-02-14 來源: 日記大全 點擊:
安卓日記app篇一:安卓開發(fā)實習(xí)_個人日志
中軟國際 長沙ETC 實 習(xí) 實 訓(xùn) 日 志
安卓日記app篇二:基于android的日記本開發(fā)
西南科技大學(xué) 課程設(shè)計報告
課程名稱: 軟件設(shè)計基礎(chǔ)設(shè)計名稱: 基于android的日記本開發(fā)姓 名:學(xué) 號: 班 級: 通信1003班 指導(dǎo)教師:起止日期: 11.28——12.12
西南科技大學(xué)信息工程學(xué)院制
方 向 設(shè) 計 任 務(wù) 書
學(xué)生班級: 通信1003班 學(xué)生姓名:學(xué)號:
設(shè)計名稱:基于android的日記本開發(fā) 起止日期: 11.28——12.12指導(dǎo)教師:
方 向 設(shè) 計 學(xué) 生 日 志
2
基于android的日記本開發(fā)
一、 摘要(150-250字)
伴隨著無線移動設(shè)備的迅速發(fā)展,手機(jī)的日益普及成為主流,在這一關(guān)鍵時期,Android系統(tǒng)的推出使手機(jī)發(fā)展進(jìn)入了一個新的領(lǐng)域。世界上一些知名移動設(shè)備生產(chǎn)廠商對于Android智能機(jī)的開發(fā)熱情日益提高,Android系統(tǒng)的使用人群正在急速提升,Android應(yīng)用程序的多樣化使人們從手機(jī)中獲得更多樂趣,方便著人們的生活,使Android得到了社會越來越多的認(rèn)同。本次設(shè)計主要描述了基于android開發(fā)一個簡易日記本的技術(shù)方法。
關(guān)鍵字:Android; DbAdapter;Activity;diary 二、 設(shè)計目的和意義
在中國,手機(jī)已經(jīng)成為人們?nèi)粘I畋夭豢缮俚囊徊糠,智能手機(jī)在高校人群中逐漸得到了普及,Android手機(jī)憑借其優(yōu)秀的系統(tǒng)性能以及良好的用戶體驗迅速得到了高校師生的青睞。在高校中,上課并不像高中時期有固定的教室和固定的時間,高校課程種類繁多,并且上課地點和時間不固定,一周內(nèi)極少會出現(xiàn)重復(fù)課程,所以要將課程表完整的記憶下來是一項很艱難的事情,很多同學(xué)不得不隨身攜帶一張課表來防止遺忘上課,但是還是不能完全避免該問題的發(fā)生,同時,作為一個當(dāng)今高速發(fā)展的時代的成員,適應(yīng)這個社會是必不能少的,在各種社交場合中,記住一些必須的信息很重要,而它們往往又繁瑣又多,不易人為記住。基于這些問題,有必要設(shè)計一款方便小巧的簡易日記本程序,可以讓用戶自定義文件,記住上課時間和地點,從而避免遺忘上課的事情出現(xiàn),同時記住那些瑣碎卻有意義的小信息。而且,由于android系統(tǒng)市場的開放性和服務(wù)免費,它的應(yīng)用程序方面就成了一塊非常大的市場,。 三、 設(shè)計原理
用戶在第一次進(jìn)入程序時會看到到一個日記本的主界面,可進(jìn)行日記文件的新建和刪除操作,按menu鍵可以選擇“幫助”和“退出”,程序主界面使用course_activity.java展示記錄,從Diary_activity, DiaryEditActivity類中可以新建和刪除日記信息,并在主界面中顯示。程序的配置信息主要存在DbAdapter中,該信息在數(shù)據(jù)顯示時讀取必要的配置信息,在按鈕監(jiān)聽函數(shù)中監(jiān)聽系統(tǒng)時間變化用來實現(xiàn)日記的創(chuàng)建功能。BaseColumns 是一個接口,里邊有兩個變量,一個是_ID="_id",一個是_COUNT="_ count" 。在Android當(dāng)中,每一個數(shù)據(jù)庫表至少有一個字段,而且這個字段是_id。所以當(dāng)我們構(gòu)造列名的輔助類時,直接實現(xiàn)BaseColumns ,這樣我們便默認(rèn)地?fù)碛辛薩id字段。在我們的日記本的數(shù)據(jù)表里,一共有4個字段,分別是:"id"、"title"、"body"、"created"。在Android中鼓勵使用內(nèi)部類,這樣不但使用方便,而且執(zhí)行效率也高是請求數(shù)據(jù)的類型,例如,在例子當(dāng)中定義的類型是diary。當(dāng)然這一部分可以是0個片段或者多個片段構(gòu)成,如果Content Provider只是暴露出了一種類型的數(shù)據(jù),那么這部分可以為空,但是如果暴露出了多種,尤其是包含子類的時候,就不能為空,"1"這部分是允許為空的,如果為空,表示請求全部數(shù)據(jù);如果不為空,表示請求特定ID的數(shù)據(jù)。DatabaseHelper是操作數(shù)據(jù)庫的輔助類,通過這個類我們可以生成數(shù)據(jù)庫,并且維護(hù)這個數(shù)據(jù)庫。 在DiaryContentProvider中,我們定義了一些變量和常量,其中這些常量主要是描述數(shù)據(jù)庫的信息。在刪除方法中,rowId = uri.getPathSegments().get(1)負(fù)責(zé)得到rowId的值。 getPathSegments()方法得到一個string的list, db.delete(DIARY_TABLE_NAME, DiaryColumns._ID + "=" + rowId, null)是標(biāo)準(zhǔn)的SQLite刪除操作。update()是更新一條數(shù)據(jù)的方法, 使用ContentProvider時首先得到SQLiteDatabase,然后得到rowId,最后再調(diào)用db.update(DIARY_ TABLE_NAME, values, DiaryColumns._ID + "="+ rowId, null)語句執(zhí)行更新工作。
3
其主要流程圖如下:
功能模塊:
四、 詳細(xì)設(shè)計步驟
簡易日記本應(yīng)該具有日記本的基本功能,比如新建,編輯,刪除,保存等,從這幾方面初步想到應(yīng)該有一個主類負(fù)責(zé)調(diào)用其他負(fù)責(zé)實現(xiàn)功能的類,這樣整個程序會比較清晰,通過流程分析和可行性分析之后我開始查閱資料編寫程序,本程序主要由六個類組成,它們分別為Dbadapter,help-activity,lookDiary,MainActivity,diary-activity和DiaryEditActivity ,
1.其中MainActivity類為整個應(yīng)用的主Activity,其主要方法如下:
? onCreate:Activity主要重寫方法之一,實現(xiàn)程序初始化和界面展示; ? find_and_modify_button:尋找并點擊按鈕; ? onClick(View v):點擊當(dāng)前所選按鈕;
? onCreateOptionMenu:實現(xiàn)Option菜單的創(chuàng)建;
? onOptionsItemSelected:實現(xiàn)菜單項的點擊事件響應(yīng);
界面設(shè)計方面通過RelativeLayout實現(xiàn)布局,使用了TextView,ImageButton文件列表通
4
過ListView實現(xiàn)界面展示。該類通過繼承ListActivity類,用來顯示ListView中的數(shù)據(jù)并實現(xiàn)對ListView上ImageView控件點擊的統(tǒng)一響應(yīng)。 其主要代碼:public class MainActivity extends Activity
{//菜單選項
public static final int HELP = Menu.FIRST; public static final int EXIT = Menu.FIRST + 1; /** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setTitle("小小日記本");find_and_modify_button();
Toast.makeText(MainActivity.this,
"歡迎使用簡易日記本", Toast.LENGTH_SHORT).show(); } private void find_and_modify_button() {// TODO Auto-generated method stubButton btn_diary = (Button) findViewById(R.id.btn_diary);btn_diary.setOnClickListener(diary_listener); } private Button.OnClickListener diary_listener = new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setClass(MainActivity.this, diary_activity.class); startActivity(intent);} } /** menu.findItem(EXIT_ID);找到特定的MenuItem* MenuItem.setIcon.可以設(shè)置menu按鈕的背景*/ public boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);menu.add(0, HELP, 0, "幫助").setIcon(R.drawable.helps);menu.add(0, EXIT, 0, "退出").setIcon(R.drawable.exit);return true; } public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case HELP:Intent help_intent = new Intent(); help_intent.setClass(MainActivity.this, help_activity.class); startActivity(help_intent);break;case EXIT:
5
安卓日記app篇三:安卓學(xué)習(xí)日記
2016.2.21
今天開始以類的方式來分析整個工程,之前做的太繁瑣了。沒有條理性,目的應(yīng)該是要看java和andorid的源碼,弄清楚為什么要這樣寫。
首先還是看main activity
一個imageButton
就是可以加圖片的按鈕,我們一般喜歡用按下和不按下是不同顏色的,這里我們可以通過在按下和不按下的時候用不同的圖片來做到
這里用到了xml的selector機(jī)制
如果單獨只要一個圖片的話,可以寫
setImageReource(int )
這樣也可以。
我們看到它在androdi:src=”@android:drawable/ic_menu_camera”
這里不是寫的@drawable
而是@android:drawable
這個是因為android的sdk里面本身就有很多的圖片素材,在
D:\elipse\eclipse\sdk\platforms\android-21\data\res\drawable-hdpi
里面
實際編一下發(fā)現(xiàn)自己啥都不會了,首先就是這個manifest
看一下manifest有什么作用
manifest這個東西是一個叫做AndroidManifest.xml的文件,而且也只能叫做這個名字
這個東西必須要位于app的根目錄
1、這個manifest必須要提供這個app的包名,用這個包名來唯一確定我這個app
而且在gen這個目錄里面,就是自動生成R的那個目錄里面,這個報名就是我這個app的包名
所以manifest最基本的寫法就是
<manifest
xmlns:android=
package=”com.maowei.test”
>
</manifest>
2、manifest要描述一些這個app所需要具備的條件:比如sdk版本信息、app所需要具備的權(quán)限等等。
<uses-sdk
android:minSdkVersion=“16”
android:targetSdkVersion=”21”/>
<manifest>和<appalication>是有且僅有一次的。
如果要定義一個<activity>,<service>,<BroadcastReceiver>,<ContentProvider>那么需要指明name屬性,這個name需要和對應(yīng)的包名的完整路徑一致
但是這里有這樣一個情況,比如我的manifest里面聲明了
<manifest package=”com.maowei.test”…>
<appalication…>
<activity android:name=”com.maowei.test.SecretService”…>
</activity>
</appalication>
</manifest>
因為我這里activity前面的部分對應(yīng)的和manifest的package是一樣的,我就可以簡寫成 <manifest package=”com.maowei.test”…>
<appalication…>
<activity android:name=”.SecretService”…>
</activity>
</appalication>
</manifest>
注意前面是有一個”.”的
本來我以為寫了manifest,appalication,activity就好了,但是實際過程中發(fā)現(xiàn)了一個問題,就是這個程序安裝了,卻沒有圖標(biāo),也不能正常啟動。導(dǎo)致你在android的桌面上根本找不到這個app
后來加了一個<intent-filter>就好了,
這樣寫的
所以很有必要看一下intent-filter的內(nèi)容
首先就要說一下intent這個類,這個是用來描述一系列操作信息的一個類。
這個問題解決了為什么我們的activity之間是可以相互跳轉(zhuǎn)的。
比如我們要從一個activity跳轉(zhuǎn)到另一個activity,一般我們會有一個觸發(fā)事件,比如一個button被按下了,那么為什么按下了就會跳到另一個activity呢,因為我們在button的onClickListener里面new了一個intent,這個intent會跳到我們指定的activity
這個就是顯式intent的作用,直接說明,從哪個activity跳到哪個activity(intent不止可以完成activity到activity之間的跳轉(zhuǎn),還可以啟動Service、還有Broadcast等等) 這里以activity為例子
比如我要從activity1跳轉(zhuǎn)到activity2
那么我就在activity1里面這樣寫:
Intent intent1 = new Intent(this,activity2.class);
startActivity(intent);
這里用了intent的這個構(gòu)造函數(shù),用于從一個context跳到另一個類里面。
這里還用了startActivity(intent)這個函數(shù),這個是在Activity類里面的一個函數(shù)。
當(dāng)然intent里面還有對應(yīng)的方法可以設(shè)置需要在哪兩個組件之間跳轉(zhuǎn)
比如setComponent 1. ComponentName componentName = new ComponentName(this, SecondActivity.class);
2. // 或者
ComponentName componentName = new ComponentName(this, "com.example.app016.SecondActivity");
3. // 或者
ComponentName componentName = new ComponentName(this.getPackageName(), "com.example.app016.SecondActivity");
4.
5. Intent intent = new Intent();
6. intent.setComponent(componentName);
7. startActivity(intent);
還有直接設(shè)置類的
setClass
Intent intent1 = new Intent();
intent1.setClass(this,activity2.class);
startActivity(intent1);
這種直接跳轉(zhuǎn)的方式就適合于那種我在一個應(yīng)用程序的內(nèi)部自己跳轉(zhuǎn)。
但是思考這樣一個問題,如果我一個應(yīng)用程序需要用到打電話這個功能,也就是說我需要從當(dāng)前的activity跳轉(zhuǎn)到系統(tǒng)的打電話的功能上面去的話,那么怎樣才可以呢?
又或者是不是打電話,而是一個分享的功能,我要分享到QQ、微博,但是我現(xiàn)在又不知道你手機(jī)上有沒有QQ,微博,那我怎么才能實現(xiàn)這個功能呢。
這里涉及到了android的一個輪詢機(jī)制,就是我在編這個app的時候就說明,我哪個activity是有怎樣的功能的,然后我在用其他的應(yīng)用程序如果需要這樣的功能,那么我就在我整個安裝的應(yīng)用程序里面找,那個app的哪個activity能夠滿足這樣的功能,那么我就可以控制直接跳轉(zhuǎn)到這個activity里面,從而完成了應(yīng)用程序之間的交互。
這里我們就發(fā)現(xiàn)了manifest這個東西,相當(dāng)于是定下了我這個app的一個特性,如果有什么用得到這個app的特點的話,我就可以通過輪詢?nèi)缓缶湍苓M(jìn)入這個app,下面看例子
如果來在manifest里面說明我這個app的特點呢?
用<intent-filter>
比如我在manifest里面寫了
<manifest xmlns:android=https://schemas.android.com/apk/res/android
package=”com.maowei.test”>
<application
android:icon=”@drawable/i(轉(zhuǎn) 載 于:www.huhawan.com 蒲 公英文 摘:安卓日記app)c_launcher”>
<activity
android:name=”com.maowei.Test”
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>
</manifest>
必須要有這個intent-filter
這樣我的這個app才能識別我進(jìn)入這個app的時候哪個是main,一開始進(jìn)入哪個activity
比如我聲明我的這個app有撥號功能
<activity
android:name=”com.maowei.Test”>
<intent-filter>
<action android:name=”android.intent.action.DIAL”>
<category android:name=”android.intent.category.DEFAULT”/>
</activity>
這樣,當(dāng)我另一個activity寫了個這個
Intent intent1 = new Intent(“android.intent.action.DIAL”);
startActivity(intent1);
這時候就會跳出一個提示框去讓你選擇所有intent_filter里面有這個撥號功能的程序
當(dāng)然,我們也可以自定義我們這個action的名字
比如 1. Intent intent = new Intent();
2. intent.setAction("abcdefg");
3. startActivity(intent);
但是這樣有個壞處,不便于管理,而且不同的app之間可能會有重復(fù)
相關(guān)熱詞搜索:日記 app 日本appstore有安卓嗎 妹調(diào)日記安卓
熱點文章閱讀