当前位置:文档之家› Android学习总结

Android学习总结

Android开发文档

●注意事项________________________ 3●搭建SDK平台__________________ 4

开发工具请参阅“开发环境安装工具”,______________________________________ 4 搭建方法请参阅文件夹“开发环境安装指南”_________________________________ 4 ●常用的Android指令和模拟器参数_ 4

?Android模擬器命令列啟動模式__________________________________________ 4 ?使用mksdcard指令模擬1GB的記憶卡 __________________________________ 5 ?模擬插入SD 卡的模擬器 _______________________________________________ 5 ?使用adb+push 上載檔案到SD記憶卡__________________________________ 5 ?使用adb+pull 從SD 記憶卡下載檔案___________________________________ 5 ?刪除SD 卡裡面的檔案 _________________________________________________ 5 ?Android模擬器影片播放方法___________________________________________ 5 ?安裝APK 應用程式___________________________________________________ 5 ?移除APK 應用程式___________________________________________________ 6 ?ADB 系統除錯與連結工具______________________________________________ 6 ?Emulator 命令列啟動參數 ______________________________________________ 7 ●开发方法________________________ 7

一.创建Activity:___________________________________________________ 7 二.Activity之间的跳转,例如Activity1和Activity2;____________________ 7 三.带值传递的Activity之间的跳转 _____________________________________ 8 四.对话框___________________________________________________________ 8 五.提示框___________________________________________________________ 9 六.自动消失的提示框_________________________________________________ 9 七.控件与代码绑定方法_______________________________________________ 9 八.使用点击事件_____________________________________________________ 9 九.使用机械按键:___________________________________________________ 9 十.设置当前编辑焦点________________________________________________ 10 十一.保存内容______________________________________________________ 10 十二.打开浏览器____________________________________________________ 11 十三.加入选单:____________________________________________________ 11 十四.查看调试信息__________________________________________________ 11 十五.Android Sdcard的使用_________________________________________ 13 十六.RadioGroup ___________________________________________________ 15 十七.Spinner应用__________________________________________________ 16

十八.文件处理______________________________________________________ 19

1.SharedPreferences _____________________________________________ 19

2.Files文件路径data/data/package name/files/new1_____________________ 19

3.Databases路径/data/data/package_name/databases/filename____________ 26 十九.资源__________________________________________________________ 26 二十.SollView滚动显示______________________________________________ 27 二十一.如何设置隐藏Android应用的标题栏和状态栏___________________ 29 import android.view.Window;_______________________________________ 29 二十二.RandomAccessFile随机存取文件 _______________________________ 30 先需要import下面的类:_________________________________________________ 30 import java.io.RandomAccessFile;_________________________________ 30 }______________________________________________________________________ 32 二十三.根据内容显示不同颜色的文本__________________________________ 32 import android.text.Html;__________________________________________ 32 二十四.Activity切换或横竖切换导致的onCreate重复执行________________ 32 二十五.获取屏幕尺寸________________________________________________ 33 二十六.activity的两种调度方式 _______________________________________ 33 作为一个运行时的对象,activity的调度方式大致分为两种:一种是指定activit所在类名直接调度,另一种是利用activity可以处理的intent进行调度。+ z+ p& c" L T2 S" s$ s x8 F# q. b) U, R6 ]( ^2 ?2 g 同一种intent可以被不同应用的不同activity处理。当出现此种情况时,用户需要选择具体的activity。 ___________________________ 33 调度方式一:____________________________________________________________ 33 startActivity(intent); _____________________________________________ 33 调度方式二:____________________________________________________________ 33 二十七.媒体库等创建________________________________________________ 34 1.android中歌曲媒体库都是在什么时候创建的________________________________ 34 Answer:开机完成后系统会对文件进行递归扫描,将媒体文件存入对应的数据库中。34 2.如果我想将其他某种同类型的文件创建一个库,以方便查找,应该怎么弄?____ 34 Answer:参考源码吧,看这个MediaProvider ,系统目前支持的Provider包含有: ___ 34 ApplicationsProvider:____________________________________________________ 34 CalendarProvider:_______________________________________________________ 34 ContactsProvider:________________________________________________________ 34 DownloadProvider:______________________________________________________ 34 DrmProvider: ___________________________________________________________ 34 GoogleContactsProvider: __________________________________________________ 34 GoogleSubscribedFeedsProvider:___________________________________________ 34 ImProvider:____________________________________________________________ 34 MediaProvider:__________________________________________________________ 34 TelephonyProvider:______________________________________________________ 34 UserDictionaryProvider:__________________________________________________ 34 WebSearchProvider:______________________________________________________ 34 3. IntentFilter f = new IntentFilter(); f.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);

f.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); f.addAction(Intent.A

CTION_MEDIA_UNMOUNTED); f.addDataScheme("file"); registerReceiver( mScanListener, f);意思?Answer:以上代码是要注册一个Receiver,当媒体扫描开始扫描结束拔掉SD卡时,会执行这个Receiver的onReceive()。 ___________________ 34 二十八.如何在Android 裡面偵測SD Card 的插入與移除 ________________ 34 二十九.ListView,有时候Activity需要继承ListActivity,则对应的xml文件中必须有一个ListView,例如_________________________________________________ 35 三十.教你开启自启动程序!__________________________________________ 35 三十一.比较onSaveInstanceState() 与onRetainNonConfigurationInstance()在不同需求中的用法__________________________________________________________ 38 三十二.这个例子将首先启动一个包含两个按钮的Activity。其中一个按钮用于调用本地通讯录,并将所选择的某一项作为返回值传给当前Activity。另外一个按钮的作用是查看当前所选择的通讯信息。正常的流程是当第一次启动程序后,第二个查看信息按钮是不可用状态。当通过Pick按钮确定选择并返回某一通讯录内容时,查看信息按钮的状态切换为可操作状态。然后当改变设备的Configuration时,可以注意到即便是Activity通过onCreate()重新构建,但是之前所保证的UI属性依然保持最后一次操作的状态。39

三十三.Fdg ________________________________________________________ 39 三十四.Sdf_________________________________________________________ 39 三十五.asda________________________________________________________ 39

注意事项

1.*.java的文件名不能和对象名相同,例如spinner.java,当调用spinner对象时,将报错;

2.文件读取乱码问题:

有时候文件读取出来是乱码,那很有可能是编码格式不匹配,系统默认文件编码为

“UTF-8”,如果你的文件不是这个编码,在读取时就需要转换,例如

private InputStream is; /* 文件输入流,读取文件流 */

String data = null;

private byte [] b; /* 字节数组,用来读取文件内容 */

is = openFileInput("testdemo16.txt");

b = new byte [5024];

is.read(b);

//data = new String(b,"GBK");/*文件编码为GBK*/

//data = new String(b,"UTF-16");/*文件编码为UNICODE*/

is .close();

3.移位操作

移位操作时必须加上(),否则结果将会是错误的,例如

Value = (int)((templong4<<24)+(templong3<<16)+(templong2<<8) +(templong1));

4.java系统的数值存入文件中,是高字节在前,低字节在后的,其文件系统是按这种方式进行读写的,而我们通常是低字节在前,高字节在后,所以在引用时要注意转换;例如

if(LowToHigh==true)

{/*如果是按低前高后的方式,则将value的值的高低位对调后再写入*/

templong1 = ((Value>>24) & 0xff);

templong2 = ((Value>>16) & 0xff);

templong3 = ((Value>>8) & 0xff);

templong4 = ((Value) & 0xff);

Value =

(int)((templong4<<24)+(templong3<<16)+(templong2<<8) +(templong1));

}

raf.writeInt(Value);

5.从文件中读取一个值给byte型变量时,如果文件中的值大于127,读取出来后的byte值将会是一个负值,如果要将其赋值给int,要进行转换,将string中的某个byte取出来也是这样,转换规则为:

/*

* byte转换为int

*/

int getintvalue(byte value)

{

if(value<0)

return (int)(256+value);

else

return (int)value;

}

6.更改模拟器界面:

https://www.doczj.com/doc/4a14516479.html,/

这里有很多模拟器的界面下载,下载后解压到安装sdk目录下的platforms\android-1.5\skins中,替换原来的,但是有可能显示器太小,显示不下,可以在run/run configurations中的Target,"Additional Emulator Command Line Options”选项中增加-scale 0.5,后面的值为缩放比例

●搭建SDK平台

开发工具请参阅“开发环境安装工具”,

搭建方法请参阅文件夹“开发环境安装指南”

●常用的Android指令和模拟器参数

Android模擬器命令列啟動模式

在android-sdk-windows-1.1\tools執行emulator以執行模擬器

加上-skin參數,指定顯示模式為HVGA-L,則可轉為橫向

emulator - skin HVGA-L (480*320,水平顯示)

emulator - skin HVGA-L (320*480,垂直顯示,模擬器預設模式)

emulator - skin HVGA-L (320*240,水平顯示)

emulator - skin HVGA-L (240*320,垂直顯示)

?使用mksdcard指令模擬1GB的記憶卡

mksdcard 1024M sacard.img

?模擬插入SD 卡的模擬器

emulator - sdcard sdcard.img

?使用adb+push 上載檔案到SD記憶卡

adb push 001.jpg /sdcard (複製檔案到 /sdcard 目錄下)

adb push pictures /sdcard (複製 picture 照片目錄到 /sdcard 目錄下) adb push mp3 /sdcard (複製 mp3 音樂目錄到 /sdcard 目錄下)

adb shell (Android 模擬器啟動命令列模式)

#cd /sdcard (進入 /sdcard 目錄)

#ls (查看 SD 記憶卡中的檔案)

?使用adb+pull 從SD 記憶卡下載檔案

adb pull /sdcard/001.jpg . (下載 /sdcard 目錄下的檔案)

adb pull /sdcard/pictures . (下載 sdcard 目錄下的 pictures 目錄)

?刪除SD 卡裡面的檔案

adb shell

#ced /sdcard

#rm 001.jpg (刪除 SD 記憶卡裡的檔案)

#rm -r * (刪除 SD 記憶卡裡所有檔案與目錄)

?Android模擬器影片播放方法

mksdcard 4096M video.img (製作一個影像檔的 SD 記憶卡)

adb push video.avi /sdcard (從電腦複製影像檔到 SD 卡中)

emulator -sdcard video.img (啟動模擬器並載入 SD 卡)

下載免費的影片播放軟體,ex: Meridian Video Player (iiivpa.apk)

https://www.doczj.com/doc/4a14516479.html,/site/eternalsandbox/Home/meridian-video-playe r

adb install iiivpa.apk (安裝Meridian Video Player)

接下來就可以用裝上去的player播放.mp4、3gp與.wmv三種檔案格式

?安裝APK 應用程式

adb install filename.apk (安裝filename.apk)

adb install -r filename.apk (保留已設定資料,重新安裝filename.apk) adb -s emulator-5554 install filename.apk (指定安裝 APK 套件在 5554 的Android 模擬器中)

?移除APK 應用程式

adb uninstall package

adb uninstall -k package (移除程式時,保留資料)

此package名稱不是安裝APK套裝時的檔名或顯示在模擬器中的應用程式名稱

可以先到/data/data或data/app目錄下,查詢想移除的package名稱

adb shell

ls /data/data 或 /data/app (查詢 Package 名稱)

exit

adb uninstall package (移除查詢到的 Package)

?ADB 系統除錯與連結工具

$adb devices (顯示目前有多少個模擬器正在執行)

$adb -s (指定模擬器來操作)

adb -s emulator-5554 install email.apk

$adb install apkfile (安裝 APK 應用程式套件)

adb install email.apk

$adb uninstall package (移除 APK 應用程式套件)

adb uninstall com.android.email

$adb shell (進入 Android 系統指令列模式)

$ls

$dmesg (查看 Android Linux Kernel 運作訊息)

ls - 顯示檔案目錄

cd - 進入目錄

rm - 刪除檔案

mv - 移動檔案

mkdir - 產生目錄

rmdir - 刪除目錄

$adb push (複製檔案到 SD 卡)

adb push mp3 /sdcard

$adb pull . (從 Android 系統下載檔案)

adb pull /data/app/com.android.email

$adb logcat (監控模擬器運作紀錄,以Ctrl + c 離開監控模式)

$adb bugreport (產生 adb 除錯報告)

$adb get-state (獲得 adb 伺服器運作狀態)

$adb start-server (啟動 adb 伺服器)

$adb kill-server (關掉 adb 伺服器)

$adb forward tcp:6100 tcp:7100 (更改模擬器網路 TCP 通訊埠)

$adb shell ps -x (顯示 Android 上所有正在執行的行程)

$adb version (顯示 adb 版本)

$adb help (顯示 adb 指令參數)

Emulator 命令列啟動參數

emulator -timezone Asia/Taipei (指定時區)

emulator -no-boo-anim (省略開機小機器人動畫畫面)

emulator -scale auto (調整模擬器視窗大小)

emulator - scale factor (factor: 0.1-3.0)

emulator -dpi-device 300 (更改模擬器的解析度,default為 165dpi) emulator -skin (更改模擬器顯示模式)

emulator -help-keys (顯示鍵盤快速鍵說明)

emulator -shell (相當於adb shell 功能)

emulator -data data.img (使 /data 目錄使用 data.img 的檔案空間) emulator -sdcard sdcard.img (使 /sdcard 目錄使用 sdcard.img 的檔案空間) emulator -cache cache.img (瀏覽器暫存檔儲存空間)

emulator -wipe-data (使模擬器恢復到原廠設定)

emulator -help (顯示 emulator 指令參數)

开发方法

一.创建Activity:

1.在layout中先新建一个xml文件(例如文件名为display,文件名只能够为小写),输

入:

关闭后重新打开;

2.在AndroidManifest.xml中加入

3.选择「New->Class」选项。Eclipse 会跳出一个「New Java Class」对话框。

在对话框中的「Name」一栏上填入「Report」。「Report」的字头需大写,这是Java 程式语言的默认规则。

在「Superclass」一栏右方,按下「Browse...」,Eclipse 会跳出「Superclass Selection」对话框。在对话框中的「Choose a type」栏位中输入「activity」,输入框下方的「Matching items」栏位中,会显示出所有可能的类别。我们选择「Activity - android.app - ...」这个选项,点击右下方的「ok」按鈕,回到上一個对话框。

此时,「Superclass」栏位中将填入「android.app.Activity」信息。按下对话框右下角的「Finish」键,Eclipse 会在「bmi」资料夹中,产生一个对应的「Report.java」档案。二.Activity之间的跳转,例如Activity1和Activity2;

Activity1中:

Intent intent = new Intent();

intent.setClass(TestDemo.this, Display.class);

s tartActivity(intent);

Activity2中按return键返回到Activity1

如果是:

Intent intent = new Intent();

intent.setClass(Activity1.this, Activity2.class);

startActivity(intent);

则Activity2中按return键返回到Activity1的上一层,因为Activity1已经Destroy 了;

三.带值传递的Activity之间的跳转

需要import android.content.Intent;

Activity1中:

Intent intent = new Intent();

i ntent.setClass(TestDemo.this, Display.class);

Bundle bundle = new Bundle();

bundle.putString("edtInput",edtInput.getText().toString());

bundle.putString("ConfirmInput",ConfirmInput.getText().toString() );

/*将Bundle对象assign给Intent*/

intent.putExtras(bundle);

startActivity(intent);

Activity2中

/* 取得Intent中的Bundle对象 */

Bundle bunde = this.getIntent().getExtras();

String sConfirmInput = bunde.getString("ConfirmInput");

String sedtInput = bunde.getString("edtInput");

四.对话框

new AlertDialog.Builder(TestDemo.this).setTitle("警告!").setMessage( "设置还没有完成,确定退

出?").setIcon(R.drawable.icon).setPositiveButton("确定",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int whichButton) {

// billdb.close();

setResult(RESULT_OK);//确定按钮事件

finish();

}

}).setNegativeButton("取消",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int whichButton) {

setResult(RESULT_CANCELED);//取消按钮事件

}

}).show();

五.提示框

new AlertDialog.Builder(TestDemo.this)

.setIcon(android.R.drawable.ic_dialog_alert)

.setTitle("错误!")

.setMessage("两次密码不同,请重新输入!")

.show();

六.自动消失的提示框

import android.widget.Toast;

Toast.makeText(TestDemo.this,"BMI 計算器",Toast.LENGTH_SHORT).show();

Toast.make.Text(TestDemo.this,”BMI 计器”,Toast_LEHGTH_SHORT).show();; 七.控件与代码绑定方法

btnConfirm=(Button)findViewById(R.id.btnConfirm);//控件与代码绑定八.使用点击事件

设置:

btnConfirm.setOnClickListener(new ClickListener());//使用点击事件使用:

class ClickListener implements OnClickListener

{

public void onClick(View v)

{

if(v==btnConfirm)

{ /*

*显示提示框

*/

}

}

}

九.使用机械按键:

public boolean onKeyDown(int keyCode, KeyEvent msg) {

if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {

// 按下中键时触发的事件,这里https://www.doczj.com/doc/4a14516479.html,提醒网友G1或ADP1使用的是轨迹球,这个Trackball仍然可以按下的,不仅仅是方向的导航。

edtInput.setText("Center");

return (true);

}

if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {

//向左

return (true);

}

if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {

//向右

return (true);

}

if(keyCode == KeyEvent.KEYCODE_DPAD_UP){

//向上

return (true);

}

if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){

//向下

return (true);

}

if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){

//音量减

return (true);

}

if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){

//音量加

return (true);

}

if(keyCode == KeyEvent.KEYCODE_POWER){

//关机

return (true);

}

if(keyCode == KeyEvent.KEYCODE_CALL){

//拨号

return (true);

}

if(keyCode == KeyEvent.KEYCODE_BACK){

//返回

return (true);

}

if(keyCode == KeyEvent.KEYCODE_ENDCALL){

//挂机

return (true);

}

return super.onKeyDown(keyCode, msg);

}

十.设置当前编辑焦点

edtInput.requestFocus();/*设置edtInput为当前焦点*/

十一.保存内容

保存

public static final String SETTING_INFOS="SEETTING_Infos";

public static final String PASSWORD="PASSWORD";

haredPreferences settings = getSharedPreferences(SETTING_INFOS,0);

s ettings.edit()

.putString(PASSWORD, edtInput.getText().toString())

.commit();

读取

SharedPreferences settings = getSharedPreferences(SETTING_INFOS,0);

String name = settings.getString(PASSWORD,"");

edtInput.setText(name);

十二.打开浏览器

需要import https://www.doczj.com/doc/4a14516479.html,.Uri;

Toast.makeText(TestDemo.this, "下一个页面",

Toast.LENGTH_SHORT).show();

//go to url 這是註解

Uri uri = Uri.parse("https://www.doczj.com/doc/4a14516479.html,/");

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

十三.加入选单:

先需要:

import android.view.Menu;

import android.view.MenuItem;

完整的程式碼如下:

protected static final int MENU_ABOUT = Menu.FIRST;

protected static final int MENU_Quit = Menu.FIRST+1;

@Override

onCreateOptionsMenu(Menu menu)

{

Super.onCreateOptionMenu(menu)

}

public boolean onCreateOptionsMenu(Menu menu) {

super.onCreateOptionsMenu(menu);

menu.add(0, MENU_ABOUT, 0, "關於...");

menu.add(0, MENU_Quit, 0, "結束");

return true;

}

public boolean onOptionsItemSelected(MenuItem item)

{

super.onOptionsItemSelected(item);

switch(item.getItemId()){

case MENU_ABOUT:

openOptionsDialog();

break;

case MENU_Quit:

finish();

break;

}

return true;

}

十四.查看调试信息

Log 的使用格式如下

Log.代号(标签,讯息);

代号

依据讯息的类型,我们有5种 Log 讯息形式可以用作记录。

Log.v (VERBOSE) 详细讯息

Log.d (DEBUG) 除错讯息

Log.i (INFO) 通知讯息

Log.w (WARN) 警告讯息

Log.e (ERROR) 错误讯息

一般较常用的是 Log.d(除错讯息) 、Log.w (警告讯息),和 Log.e (错误讯息)。范例中多使用 Log.d(除错讯息) 。

标签

private static final String TAG = "Bmi";

....

Log.d(TAG, "find Views");

Log.(v,d,i,w,e) 的第一个参数,是一个自定的记录标签。在目前的 BMI 应用程式范例中,我们还看不太出來自定记录标签的意义。但是当程式的功能一扩张的時候(例如像在 AppDemos 范例那样,包含各种不同功能),我们可以为不同的功能,给予不同的记录标签。

讯息

Log.d(TAG, "find Views");

在 Log.(v,d,i,w,e) 的第二个参数中,加入我们想要记录的资讯。

我们也不是一定得为某个TAG 事先定义好一个记录标签,我们可以用当前的Activity 名称来作为记录标签:

Log.e(this.toString(), "error: " + err.toString());

在偵錯環境中查看除錯訊息

在程式中加上除錯訊息後,我們可以使用除錯模式 (Debug Mode) 運行模擬器,並透過開發工具來查看除錯訊息。

偵錯工具的正式名稱為 Dalvik Debug Monitor Service (DDMS)。

啟動模擬器

使用除錯模式 (Debug Mode) 運行模擬器(選單列->Run->Debug History->BMI)。

切換到偵錯環境配置

點選開發環境右上角的 "Open Perspective"按鈕,選擇 "Other..."選項。選擇後會彈出一個「Open Perspective」(開啟環境配置)對話框。對話框中列出了所有可用的環境配置列表,選擇 "Debug"。此時,右上角的環境配置圖示列中,會多出一個「Debug」環境配置圖示。整個開發工具的介面配置也為之一變。在右上角的環境配置圖示列中,點選「Java」環境配置圖示,就會回到我們原來的介面配置。

現在先切換到「Debug」環境配置,可以看到右下角的「LogCat」視窗。其上有五個醒目的 V、D、I、W、E 圖示,分別代表著五種 Log 形式(Verbose, Debug, Info, Warn, Error),還有一個綠色的「+」號,與一個紅色的「-」號。

模擬器運行時會產生很多的訊息記錄(Log),一不注意就看到眼花了。這時候,我們自訂的記錄標籤(範例中自訂的標籤是「Bmi」)就派上了用場,正好可以為 LogCat 加上一個過濾器(Log Filter),只顯示與「Bmi」標籤相關的訊息記錄。

加入訊息記錄過濾器(Log Filter)

在「LogCat」視窗右側,按下綠色的「+」號,會彈出一個「Log Filter」視窗。在「Log Filter」

視窗的「by Log Tag」欄位中填入「Bmi」,並填入任意的「Filter Name」後,按下「ok」按鈕。「LogCat」視窗上會多出一個與我們填入的「Filter Name」相同的標籤。裡面的內容,即所有標示為「Bmi」的自訂訊息記錄。

十五.Android Sdcard的使用

1、首先是生成sdcard镜像文件sdcard.img或者是其他的名称。命令为:mksdcard -l sdcard capacity directory

例如:mksdcard 1024M e:\android-sdk_windows-1.5_r2\tools\card\mycard.abc directory 指的是镜像文件存放的目录,capacity就是要创建的镜像文件的容量。这里将镜像文件放在当前目录下。

2、在开发环境(Eclipse)中,可以在Run Configuration对话框中设置启动参数,如图1所示。

图1

当然,也可以在Preferences对话框中设置默认启动参数。如图2所示。这样在新建立的Android工程中就自动加入了装载sdcard虚拟文件的命令行参数。

插件带的DDMS透视图。如图4所示。

图4

右上角的几个按钮可以删除、添加文件。

如果不使用DDMS插件,或不在eclipse里工作,也可以使用其他工具来操作sdcard

虚拟设备。如在windows下,可以使用mtools,该软件可以从如下地址下载:

https://www.doczj.com/doc/4a14516479.html,/nokiaguy/winima81.rar

安装完后,用mtools打开mycard.img,就会看到相应的目录和文件。如图5所示。

图5

十六.RadioGroup

先需要:

import android.widget.RadioButton;

import android.widget.RadioGroup;

接下来:

private RadioButton RadioButton01;

private RadioButton RadioButton02;

private RadioGroup RadioGroup01;

RadioButton01 = (RadioButton)findViewById(R.id.RadioButton01); RadioButton02 = (RadioButton)findViewById(R.id.RadioButton02); RadioGroup01 = (RadioGroup)findViewById(R.id.RadioGroup01); RadioGroup01.setOnCheckedChangeListener(new

RadioGroup.OnCheckedChangeListener()

{

public void onCheckedChanged(

RadioGroup group,

int checkedId) {

if(checkId== RadioButton01.getId ())

Log.e("TestDemo","选择的是RadioButton01");

else if(checkId== RadioButton02.getId ())

Log.e("TestDemo","选择的是RadioButton02");

else if(checkId==-1)

Log.e("TestDemo","啥都没有选");

}

}

这样,当选项发生改变时,都会进入onCheckedChanged()打印信息,另外一种方式是可以再某个button响应按键中做,例如

int checkId=RadioGroup01.getCheckedRadioButtonId();

if(checkId== RadioButton01.getId ())

Log.e("TestDemo","选择的是RadioButton01");

else if(checkId== RadioButton02.getId ())

Log.e("TestDemo","选择的是RadioButton02");

else if(checkId==-1)

2

或者

RadioGroup01.setOnCheckedChangeListener(mChangeRadio);

private RadioGroup.OnCheckedChangeListener mChangeRadio = new

RadioGroup.OnCheckedChangeListener()

{

@Override

public void onCheckedChanged(RadioGroup group, int checkedId)

{

if(checkedId==RadioButton01.getId())

{

Log.e("TestDemo","选择的是RadioButton01");

}

else if(checkedId==RadioButton02.getId())

{

Log.e("TestDemo","选择的是RadioButton02");

}

}

};

十七.Spinner应用

先需要

import android.widget.ArrayAdapter;

import android.widget.Spinner;

1.下拉框数据在程序中定义

private static final String[] countriesStr =

{ "北京市", "上海市", "天津市", "重庆市" ,"北京市1", "上海市1", "天津市1", "重庆市1" ,"北京市2", "上海市2", "天津市2", "重庆市2" };

private Spinner mySpinner;

private ArrayAdapter adapter;

mySpinner = (Spinner) findViewById(R.id.mySpinner);

allCountries = new ArrayList();

for (int i = 0; i < countriesStr.length; i++)

{

allCountries.add(countriesStr[i]);

}

adapter = new ArrayAdapter(this,

https://www.doczj.com/doc/4a14516479.html,yout.simple_spinner_item, allCountries);

/* myspinner_dropdown为自定义下拉菜单样式定义在res/layout目录下 */

adapter.setDropDownViewResource(https://www.doczj.com/doc/4a14516479.html,yout.simple_spinner_d ropdown_item);//myspinner_dropdown

/* 将ArrayAdapter添加Spinner对象中 */

mySpinner.setAdapter(adapter);

/* 将mySpinner添加OnItemSelectedListener */

mySpinner.setOnItemSelectedListener

(new Spinner.OnItemSelectedListener()

{

@Override

public void onItemSelected

(AdapterView arg0, View arg1, int arg2,

long arg3)

{

/* 将所选mySpinner的值带入myTextView中 */

myTextView.setText("选择的是" + adapter.getItem(arg2));

/* 将mySpinner显示 */

arg0.setVisibility(View.VISIBLE);

}

@Override

public void onNothingSelected(AdapterView arg0)

{

// TODO Auto-generated method stub

}

});

添加记录:

String newCountry = edtCountry.getText().toString();

/* 先比较添加的值是否已存在,不存在才可添加 */

for (int i = 0; i < adapter.getCount(); i++)

{

if (newCountry.equals(adapter.getItem(i)))

{

return;

}

}

if (!newCountry.equals(""))

{

/* 将值添加至adapter */

adapter.insert(newCountry,0);

/* 取得添加的值的位置 */

int position = adapter.getPosition(newCountry);

/* 将Spinner选择在添加的值的位置 */

mySpinner.setSelection(position);

/* 将myEditText清空 */

edtCountry.setText("");

}

删除记录:

if (mySpinner.getSelectedItem() != null)

{

/* 删除mySpinner的值 */

adapter.remove(mySpinner.getSelectedItem().toString());

/* 将myEditText清空 */

edtCountry.setText("");

if (adapter.getCount() == 0)

{

/* 将myTextView清空 */

myTextView.setText("");

}

}

注意:

如果用的是

adapter = new ArrayAdapter(this,

https://www.doczj.com/doc/4a14516479.html,yout.simple_spinner_item, countriesStr);

则不可以添加删除;

2.下拉框数据信息从xml文件中导入

ArrayAdapter arrayAdapter =

ArrayAdapter.createFromResource(this,R.array.countries,https://www.doczj.com/doc/4a14516479.html,yo ut.simple_spinner_item);

arrayAdapter.setDropDownViewResource(https://www.doczj.com/doc/4a14516479.html,yout.simple_spin ner_dropdown_item);

//将arrayAdapter添加到Spinner中去

newspinner.setAdapter(arrayAdapter);

/*删除Spinner中的值*/

Newspinner.remove(Newspinner.getSelectedItem().toString);

/*添加Spinner中的值newCountry 是个字符串*/

Newspinner.add(newCountry);

}

//Array.xml文件的写法

China2

Russia2

USA2

Germany2

十八.文件处理

1.SharedPreferences

数据量比较小的时候,一般就是密码…的保存用SharedPreferences

该文件是在data/data/package name/shared_prefs/aa.xml中的

写数据

//首先获取一个SharedPreferences对象

SharedPreferences settings = getSharedPreferences("aa", 0); aa表示文件名,0表示模式

settings.edit()

开始编辑

.putString(NAME, fileheight.getText().toString())

NAME相当于标示符,第二个参数就是要保存的数据

.putString(PASSWORD, fileweight.getText().toString()) PASSWORD相当于标示符,第二个参数就是要保存的数据

.commit();

相当于保存起来

取出数据

SharedPreferences settings = getSharedPreferences("aa",0); //获取一个SharedPreferences对象

String name = settings.getString(NAME, "");

//取出保存的NAME,如果不存在就用后面第二个参数作为返回值

String password = settings.getString(PASSWORD, "");

//取出保存的PASSWORD,如果不存在就用后面第二个参数作为返回值

2.Files文件路径data/data/package name/files/new1

import android.app.Activity;

import android.os.Bundle;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

/*

Android支持四种数据存储方式,分别是Preference, File, DataBase, Content Provider 。先说下Preference,File,DataBase这三种方式分别对应的目录是

/data/data/Package Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package Name/database。在Android中通常使用File存储方式是用Context.openFileOutput(String fileName,int mode)和

Context.openFileInput(String fileName)。

Context.openFileOutput(String fileName, int mode)生成的文件自动存储在

/data/data/Package Name/files目录下,其全路径是/data/data/Package

Name/files/fileName。这里的参数fileName不可以包含路径分割符(如"/")。通常来说,这种方式生成的文件只能在这个apk内访问。但这个结论是指使用

Context.openFileInput(String fileName)的方式。使用这种方式,每个apk只可以访问自己的/data/data/Package Name/files目录下的文件,原因很简单,参数fileName 中不可以包含路径分割符,Android会自动在/data/data/Package Name/files目录下寻找文件名为fileName的文件。

但是如果你直接使用这个File,那么这个File在其它apk中也是可以访问的,

代码如下

File file = new File("/data/data/Package Name/files/fileName");

另外还有一个方法可以改变这个生成文件的权限。可以直接在Java代码中执行Linux命令,毕竟Android归根到底也是Linux .代码如下:

Process process = Runtime.getProcess().exec("chmod 666

/data/data/Package Name/files/fileName");

process.waitFor();

* 在android中文件的都路径都在固定的路径下面操作,若要使用已有文件

* 在程序第一次运行时将该文件拷贝文件到data/data/该包名/files/目录下。

* 接下来可以用getFilesDir()取得这个目录路径来构造整个文件的路径

例如

File file = new File(getFilesDir(),"new.txt");

try

{//读取输入流

FileInputStream input = new FileInputStream(file);

}

catch (FileNotFoundException e1)

{

// TODO Auto-generated catch block

e1.printStackTrace();

}

相关主题
文本预览
相关文档 最新文档