




已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Android應(yīng)用編程技術(shù)第四講講義-我的日記1在res/layout目錄下添加activity_login.xml和activity_diary.xml文件,并將原來(lái)的activit_main.xml刪除2. 在activity_login.xml添加相應(yīng)的控件一個(gè)TextView用來(lái)顯示“我的日記”一個(gè)EditView用來(lái)輸入用戶(hù)名一個(gè)EditView用來(lái)輸入密碼一個(gè)CheckBox復(fù)選框用來(lái)讓用戶(hù)對(duì)是否記住用戶(hù)名和密碼一個(gè)Button作為登錄按鈕一個(gè)ProgressBar用來(lái)登錄時(shí),模擬后臺(tái)驗(yàn)證等待Activit_login.xml布局文件:* *3在activity_diary.xml中添加相應(yīng)的控件添加一個(gè)EditText用來(lái)輸入日記的內(nèi)容,并且缺省為“請(qǐng)?jiān)谶@兒寫(xiě)下你的心情日記”,用來(lái)提示用戶(hù)在該空間中進(jìn)行日記內(nèi)容的輸入添加一個(gè)Button,當(dāng)用戶(hù)單擊該按鈕時(shí),對(duì)用戶(hù)輸入的日記內(nèi)容進(jìn)行保存添加一個(gè)Button,當(dāng)用戶(hù)單擊該按鈕時(shí),退出該應(yīng)用程序activity_diary.xml布局文件:* *4一般情況下,在布局文件中使用的字符串資源(比如按鈕名稱(chēng)),存放在字符串資源文件中,字符串資源文件存放在res/values目錄下,文件名稱(chēng)為strings.xml在該程序中,strings.xml文件內(nèi)容為* 我的日記 Settings Hello world! 用戶(hù)名 密碼 記住密碼 登錄 保存 退出 我的日記 請(qǐng)?jiān)谶@兒寫(xiě)下你的心情日記*5在res目錄下創(chuàng)建menu文件夾,兩種方法,一種是在文件夾下添加一個(gè)目錄,另一種是在工程下新建一個(gè)目錄在menu目錄下新建一個(gè)main.xml文件,我們用這個(gè)文件來(lái)創(chuàng)建一個(gè)選項(xiàng)菜單* *6.分別創(chuàng)建LoginActivity.java和DiaryActivity.java文件在LoginActivity.java中添加變量除了TextView外,為幾乎每個(gè)控件對(duì)應(yīng)的添加一個(gè)變量變量:*EditText usernameEdit; / 用戶(hù)名輸入框EditText pwdEdit; / 密碼輸入框CheckBox rememberPwdCheck;/ 記住密碼的復(fù)選框Button loginBtn;/ 登錄按鈕ProgressBar progressBar;/ 進(jìn)度條SharedPreferences pref; / 簡(jiǎn)單數(shù)據(jù)存儲(chǔ)Handler handler; / 線程的手柄static final int STOP = 0x111;/ 進(jìn)度完成的標(biāo)志static final int CONTINUE = 0x112;/ 繼續(xù)顯示進(jìn)度條的標(biāo)志static final int MAX = 100; / 最大的進(jìn)度為100%int progress; / 進(jìn)度條的當(dāng)前進(jìn)度*其次,定義了STOP、CONTINUE和MAX三個(gè)常量,這是處理進(jìn)度條時(shí)用到的常量Handler變量是一個(gè)線程句柄,progress記錄當(dāng)前的進(jìn)度前面的初始化工作都在onCreate內(nèi)進(jìn)行,而且也是在onCreate中對(duì)變量添加監(jiān)聽(tīng)器,同時(shí)實(shí)現(xiàn)監(jiān)聽(tīng)事件的響應(yīng)函數(shù),而在今天的學(xué)習(xí)中,初始化工作是在一個(gè)init()函數(shù)中完成的,而且監(jiān)聽(tīng)器也是用一個(gè)專(zhuān)門(mén)的setListeners()來(lái)完成。問(wèn)題:為什么不在onCreate()完成所有的操作呢?解答:如果全部在onCreate中實(shí)現(xiàn),使得該函數(shù)過(guò)于龐大,導(dǎo)致程序難以理解, 程序可讀性差。分開(kāi)來(lái)做,由init完成初始化工作,由setListeners來(lái)完成監(jiān)聽(tīng)事件的相關(guān)操作,使得程序更有條理性,每一個(gè)函數(shù)完成一個(gè)或者少數(shù)功能,程序可讀性強(qiáng),便于維護(hù)。LoginActivity.java:*package cn.xatu.cs.mydiary;import android.opengl.Visibility;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.view.Menu;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.inputmethod.InputMethodManager;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.ProgressBar;import android.widget.Toast;public class LoginActivity extends Activity EditText usernameEdit; / 用戶(hù)名輸入框 EditText pwdEdit; / 密碼輸入框 CheckBox rememberPwdCheck;/ 記住密碼的復(fù)選框 Button loginBtn;/ 登錄按鈕 ProgressBar progressBar;/ 進(jìn)度條 SharedPreferences pref; / 簡(jiǎn)單數(shù)據(jù)存儲(chǔ) Handler handler; / 線程的手柄 static final int STOP = 0x111;/ 進(jìn)度完成的標(biāo)志 static final int CONTINUE = 0x112;/ 繼續(xù)顯示進(jìn)度條的標(biāo)志 static final int MAX = 100; / 最大的進(jìn)度為100% int progress; / 進(jìn)度條的當(dāng)前進(jìn)度 Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); init(); / 初始化工作 setListeners();/ 事件監(jiān)聽(tīng) void init() /* 初始化控件變量 */ initViews(); /* 初始化線程的手柄 */ initHandler(); void initViews() usernameEdit = (EditText) findViewById(R.id.edit_username); pwdEdit = (EditText) findViewById(R.id.edit_pwd); rememberPwdCheck = (CheckBox) findViewById(R.id.check_rememberPwd); loginBtn = (Button) findViewById(R.id.btn_login); progressBar = (ProgressBar) findViewById(R.gressbar); pref = getSharedPreferences(userinfo, Context.MODE_PRIVATE); usernameEdit.setText(pref.getString(USERNAME, ); if (pref.getBoolean(REMBERPWD, false) pwdEdit.setText(pref.getString(PWD, ); else pwdEdit.setText(); rememberPwdCheck.setChecked(pref.getBoolean(REMBERPWD, false); progress = 0; progressBar.setProgress(progress); progressBar.setMax(MAX); void initHandler() handler = new Handler() Override public void handleMessage(Message msg) / TODO Auto-generated method stub switch (msg.what) /* 進(jìn)度未完成 */ case CONTINUE: if (!Thread.currentThread().isInterrupted() / 當(dāng)前線程正在運(yùn)行 progressBar.setProgress(progress); break; /* 進(jìn)度完成 */ case STOP: Intent intent = new Intent(); intent.setClass(LoginActivity.this, DiaryActivity.class); startActivity(intent); finish(); / 結(jié)束該Activity break; default: break; super.handleMessage(msg); ; void setListeners() loginBtn.setOnClickListener(new OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub String username = usernameEdit.getText().toString(); String pwd = pwdEdit.getText().toString(); if (!username.equals(admin) | (!pwd.equals(admin) Toast.makeText(LoginActivity.this, 用戶(hù)名或密碼不正確, Toast.LENGTH_LONG).show(); else /*用戶(hù)名與密碼都正確的情況處理*/ Editor editor = pref.edit(); if (rememberPwdCheck.isChecked() editor.putString(USERNAME, username); editor.putString(PWD, pwd); editor.putBoolean(REMBERPWD, true); mit(); else editor.putBoolean(REMBERPWD, false); mit(); usernameEdit.setEnabled(false); pwdEdit.setEnabled(false); loginBtn.setEnabled(false); /*將顯示進(jìn)度條5秒鐘*/ progressBar.setVisibility(View.VISIBLE); new Thread(new Runnable() Override public void run() / TODO Auto-generated method stub try /*循環(huán)5次,每次睡眠1秒鐘*/ for (int i = 0; i left & ev.getX() top & ev.getY() bottom) / 點(diǎn)擊EditText的事件,忽略它。 return false; else return true; / 如果焦點(diǎn)不是EditText則忽略,這個(gè)發(fā)生在視圖剛繪制完,第一個(gè)焦點(diǎn)不在EditView上,和用戶(hù)用軌跡球選擇其他的焦點(diǎn) return false; / 隱藏軟鍵盤(pán) private void hideSoftInput(View view) InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (manager != null) manager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); *附:static final int的相關(guān)解釋1.static變量 按照是否靜態(tài)的對(duì)類(lèi)成員變量進(jìn)行分類(lèi)可分兩種:一種是被static修飾的變量,叫靜態(tài)變量或類(lèi)變量;另一種是沒(méi)有被static修飾的變量,叫實(shí)例變量。兩者的區(qū)別是: 對(duì)于靜態(tài)變量在內(nèi)存中只有一個(gè)拷貝(節(jié)省內(nèi)存),JVM只為靜態(tài)分配一次內(nèi)存,在加載類(lèi)的過(guò)程中完成靜態(tài)變量的內(nèi)存分配,可用類(lèi)名直接訪問(wèn)(方便),當(dāng)然也可以通過(guò)對(duì)象來(lái)訪問(wèn)(但是這是不推薦的)。對(duì)于實(shí)例變量,沒(méi)創(chuàng)建一個(gè)實(shí)例,就會(huì)為實(shí)例變量分配一次內(nèi)存,實(shí)例變量可以在內(nèi)存中有多個(gè)拷貝,互不影響(靈活)。2,final變量: 當(dāng)你在類(lèi)中定義變量時(shí),在其前面加上final關(guān)鍵字,那便是說(shuō),這個(gè)變量一旦被初始化便不可改變,這里不可改變的意思對(duì)基本類(lèi)型來(lái)說(shuō)是其值不可變,而對(duì)于對(duì)象變量來(lái)說(shuō)其引用不可再變。其初始化可以在兩個(gè)地方,一是其定義處,也就是說(shuō)在final變量定義時(shí)直接給其賦值,二是在構(gòu)造函數(shù)中。這兩個(gè)地方只能選其一,要么在定義時(shí)給值,要么在構(gòu)造函數(shù)中給值,不能同時(shí)既在定義時(shí)給了值,又在構(gòu)造函數(shù)中給另外的值。 當(dāng)函數(shù)參數(shù)為final類(lèi)型時(shí),你可以讀取使用該參數(shù),但是無(wú)法改變?cè)搮?shù)的值。 另外方法中的內(nèi)部類(lèi)在用到方法中的參變量時(shí),此參變也必須聲明為final才可使用3.static final int 一般用于常量定義DiaryActivity.java:*package cn.xatu.cs.mydiary;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Timer;import java.util.TimerTask;import android.R.string;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.text.format.Time;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.inputmethod.InputMethodManager;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class DiaryActivity extends Activity EditText mydiaryEditText; / 寫(xiě)入日記的文本輸入框 Button saveButton,returnBtn; / 保存按鈕 static final String FILENAME = MyDiary.txt; / 日記的文件名 FileOutputStream fOutputStream; / 文件輸出流 FileInputStream finputStream;/ 文件輸入流 private static long INTERVAL = 2000; /兩次返回鍵間隔最大值常量 private long mFirstBackKeyPressTime = -1; /第一次按下返回鍵的時(shí)間 private long mLastBackKeyPressTime = -1; /第一次按下返回鍵的時(shí)間 Override protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_diary); init(); / 初始化工作 setListeners(); / 增加事件響應(yīng) void init() mydiaryEditText = (EditText) findViewById(R.id.edit_mydiary); / 實(shí)例化寫(xiě)入日記的文本輸入框 saveButton = (Button) findViewById(R.id.btn_save); / 實(shí)例化保存按鈕 returnBtn =(Button)findViewById(R.id.btn_return); /* 將上次保存的日記文件打開(kāi) */ try finputStream = openFileInput(FILENAME); ByteArrayOutputStream bou = new ByteArrayOutputStream(); byte buffer = new byte1024; int length = 0; while (length = finputStream.read(buffer) != -1) bou.write(buffer, 0, length); mydiaryEditText.setText(new String(bou.toByteArray(); catch (FileNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); /* 在此次要寫(xiě)入的日記前加入日期信息 */ Time time = new Time(GMT+8); time.setToNow(); mydiaryEditText.append(n + time.year + 年- + (time.month + 1) + 月- + time.monthDay + 日n); void setListeners() saveButton.setOnClickListener(new OnClickListener() Override public void onClick(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年撫順市稅務(wù)系統(tǒng)遴選面試真題附解析含答案
- 2024年事業(yè)單位考試四川省涼山彝族自治州《公共基礎(chǔ)知識(shí)》深度預(yù)測(cè)試題含解析
- 老年人醫(yī)藥消費(fèi)行為調(diào)查分析
- 老年衛(wèi)生健康宣教課件
- 老師職業(yè)介紹
- 老師關(guān)愛(ài)留守兒童課件
- 老師介紹自己的課件
- 房地產(chǎn)開(kāi)發(fā)不定期按揭貸款借款合同
- 美食廣場(chǎng)承包經(jīng)營(yíng)與品牌整合管理合同
- 美術(shù)生班會(huì)課件
- 2025年天津市中考?xì)v史試卷(含答案)
- 2025秋初升高銜接新高一物理模擬卷-分班模擬卷(五)
- 2024年上海高中學(xué)業(yè)水平合格性考試歷史試卷真題(含答案)
- 2025年人教版七年級(jí)數(shù)學(xué)下冊(cè)期末測(cè)試卷
- 公司年終答謝宴策劃方案
- 小學(xué)一年級(jí)數(shù)學(xué)下冊(cè)應(yīng)用題100道
- 安徽省馬鞍山市2023-2024學(xué)年高一下學(xué)期期末教學(xué)質(zhì)量監(jiān)測(cè)化學(xué)試卷(含解析)
- 反詐騙(企業(yè)員工)講座培訓(xùn)課件
- T/CBMCA 019-2021醫(yī)用潔凈室裝飾材料技術(shù)標(biāo)準(zhǔn)
- 2025-2030中國(guó)微晶纖維素市場(chǎng)深度評(píng)估與需求潛力分析研究報(bào)告
- 2025年社會(huì)調(diào)查方法與實(shí)踐考試試題及答案
評(píng)論
0/150
提交評(píng)論