手把手教Android編程-我的日記.docx_第1頁
手把手教Android編程-我的日記.docx_第2頁
手把手教Android編程-我的日記.docx_第3頁
手把手教Android編程-我的日記.docx_第4頁
手把手教Android編程-我的日記.docx_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Android應用編程技術第四講講義-我的日記1在res/layout目錄下添加activity_login.xml和activity_diary.xml文件,并將原來的activit_main.xml刪除2. 在activity_login.xml添加相應的控件一個TextView用來顯示“我的日記”一個EditView用來輸入用戶名一個EditView用來輸入密碼一個CheckBox復選框用來讓用戶對是否記住用戶名和密碼一個Button作為登錄按鈕一個ProgressBar用來登錄時,模擬后臺驗證等待Activit_login.xml布局文件:* *3在activity_diary.xml中添加相應的控件添加一個EditText用來輸入日記的內(nèi)容,并且缺省為“請在這兒寫下你的心情日記”,用來提示用戶在該空間中進行日記內(nèi)容的輸入添加一個Button,當用戶單擊該按鈕時,對用戶輸入的日記內(nèi)容進行保存添加一個Button,當用戶單擊該按鈕時,退出該應用程序activity_diary.xml布局文件:* *4一般情況下,在布局文件中使用的字符串資源(比如按鈕名稱),存放在字符串資源文件中,字符串資源文件存放在res/values目錄下,文件名稱為strings.xml在該程序中,strings.xml文件內(nèi)容為* 我的日記 Settings Hello world! 用戶名 密碼 記住密碼 登錄 保存 退出 我的日記 請在這兒寫下你的心情日記*5在res目錄下創(chuàng)建menu文件夾,兩種方法,一種是在文件夾下添加一個目錄,另一種是在工程下新建一個目錄在menu目錄下新建一個main.xml文件,我們用這個文件來創(chuàng)建一個選項菜單* *6.分別創(chuàng)建LoginActivity.java和DiaryActivity.java文件在LoginActivity.java中添加變量除了TextView外,為幾乎每個控件對應的添加一個變量變量:*EditText usernameEdit; / 用戶名輸入框EditText pwdEdit; / 密碼輸入框CheckBox rememberPwdCheck;/ 記住密碼的復選框Button loginBtn;/ 登錄按鈕ProgressBar progressBar;/ 進度條SharedPreferences pref; / 簡單數(shù)據(jù)存儲Handler handler; / 線程的手柄static final int STOP = 0x111;/ 進度完成的標志static final int CONTINUE = 0x112;/ 繼續(xù)顯示進度條的標志static final int MAX = 100; / 最大的進度為100%int progress; / 進度條的當前進度*其次,定義了STOP、CONTINUE和MAX三個常量,這是處理進度條時用到的常量Handler變量是一個線程句柄,progress記錄當前的進度前面的初始化工作都在onCreate內(nèi)進行,而且也是在onCreate中對變量添加監(jiān)聽器,同時實現(xiàn)監(jiān)聽事件的響應函數(shù),而在今天的學習中,初始化工作是在一個init()函數(shù)中完成的,而且監(jiān)聽器也是用一個專門的setListeners()來完成。問題:為什么不在onCreate()完成所有的操作呢?解答:如果全部在onCreate中實現(xiàn),使得該函數(shù)過于龐大,導致程序難以理解, 程序可讀性差。分開來做,由init完成初始化工作,由setListeners來完成監(jiān)聽事件的相關操作,使得程序更有條理性,每一個函數(shù)完成一個或者少數(shù)功能,程序可讀性強,便于維護。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; / 用戶名輸入框 EditText pwdEdit; / 密碼輸入框 CheckBox rememberPwdCheck;/ 記住密碼的復選框 Button loginBtn;/ 登錄按鈕 ProgressBar progressBar;/ 進度條 SharedPreferences pref; / 簡單數(shù)據(jù)存儲 Handler handler; / 線程的手柄 static final int STOP = 0x111;/ 進度完成的標志 static final int CONTINUE = 0x112;/ 繼續(xù)顯示進度條的標志 static final int MAX = 100; / 最大的進度為100% int progress; / 進度條的當前進度 Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); init(); / 初始化工作 setListeners();/ 事件監(jiān)聽 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) /* 進度未完成 */ case CONTINUE: if (!Thread.currentThread().isInterrupted() / 當前線程正在運行 progressBar.setProgress(progress); break; /* 進度完成 */ case STOP: Intent intent = new Intent(); intent.setClass(LoginActivity.this, DiaryActivity.class); startActivity(intent); finish(); / 結束該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, 用戶名或密碼不正確, Toast.LENGTH_LONG).show(); else /*用戶名與密碼都正確的情況處理*/ 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); /*將顯示進度條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) / 點擊EditText的事件,忽略它。 return false; else return true; / 如果焦點不是EditText則忽略,這個發(fā)生在視圖剛繪制完,第一個焦點不在EditView上,和用戶用軌跡球選擇其他的焦點 return false; / 隱藏軟鍵盤 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的相關解釋1.static變量 按照是否靜態(tài)的對類成員變量進行分類可分兩種:一種是被static修飾的變量,叫靜態(tài)變量或類變量;另一種是沒有被static修飾的變量,叫實例變量。兩者的區(qū)別是: 對于靜態(tài)變量在內(nèi)存中只有一個拷貝(節(jié)省內(nèi)存),JVM只為靜態(tài)分配一次內(nèi)存,在加載類的過程中完成靜態(tài)變量的內(nèi)存分配,可用類名直接訪問(方便),當然也可以通過對象來訪問(但是這是不推薦的)。對于實例變量,沒創(chuàng)建一個實例,就會為實例變量分配一次內(nèi)存,實例變量可以在內(nèi)存中有多個拷貝,互不影響(靈活)。2,final變量: 當你在類中定義變量時,在其前面加上final關鍵字,那便是說,這個變量一旦被初始化便不可改變,這里不可改變的意思對基本類型來說是其值不可變,而對于對象變量來說其引用不可再變。其初始化可以在兩個地方,一是其定義處,也就是說在final變量定義時直接給其賦值,二是在構造函數(shù)中。這兩個地方只能選其一,要么在定義時給值,要么在構造函數(shù)中給值,不能同時既在定義時給了值,又在構造函數(shù)中給另外的值。 當函數(shù)參數(shù)為final類型時,你可以讀取使用該參數(shù),但是無法改變該參數(shù)的值。 另外方法中的內(nèi)部類在用到方法中的參變量時,此參變也必須聲明為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; / 寫入日記的文本輸入框 Button saveButton,returnBtn; / 保存按鈕 static final String FILENAME = MyDiary.txt; / 日記的文件名 FileOutputStream fOutputStream; / 文件輸出流 FileInputStream finputStream;/ 文件輸入流 private static long INTERVAL = 2000; /兩次返回鍵間隔最大值常量 private long mFirstBackKeyPressTime = -1; /第一次按下返回鍵的時間 private long mLastBackKeyPressTime = -1; /第一次按下返回鍵的時間 Override protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_diary); init(); / 初始化工作 setListeners(); / 增加事件響應 void init() mydiaryEditText = (EditText) findViewById(R.id.edit_mydiary); / 實例化寫入日記的文本輸入框 saveButton = (Button) findViewById(R.id.btn_save); / 實例化保存按鈕 returnBtn =(Button)findViewById(R.id.btn_return); /* 將上次保存的日記文件打開 */ 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(); /* 在此次要寫入的日記前加入日期信息 */ 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論