SeekBar物件
public void onCreate(Bundle savedInstanceState) {
.........
skb_seekbar = (SeekBar)findViewById(R.id.seekbar);
skb_seekbar.setOnSeekBarChangeListener(change);
}
private OnSeekBarChangeListener change = new OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
txv_percentage.setText(String.valueOf(arg1));
set_brightness(arg1);
}
public void onStartTrackingTouch(SeekBar seekBar) {}
public void onStopTrackingTouch(SeekBar seekBar) {}
2011年5月25日 星期三
2011年5月24日 星期二
Rating Bar物件
Rating Bar物件 <RatingBar
android:id="@+id/ratingbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:stepSize="1.0"/>
RatingBar ratingbar = (RatingBar) findViewById(R.id.ratingbar);
ratingbar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
Toast.makeText(HelloFormStuff.this, "New Rating: " + rating, Toast.LENGTH_SHORT).show();
}
});
android:id="@+id/ratingbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:stepSize="1.0"/>
RatingBar ratingbar = (RatingBar) findViewById(R.id.ratingbar);
ratingbar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
Toast.makeText(HelloFormStuff.this, "New Rating: " + rating, Toast.LENGTH_SHORT).show();
}
});
Toggle Button物件
Toggle Button物件通常用於開/關選項設定
<ToggleButton android:id="@+id/togglebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="Vibrate on"
android:textOff="Vibrate off"/>
ToggleButton togglebutton = (ToggleButton) findViewById(R.id.togglebutton);
togglebutton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
if (togglebutton.isChecked()) {
Toast.makeText(HelloFormStuff.this, "Checked", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(HelloFormStuff.this, "Not checked", Toast.LENGTH_SHORT).show();
}
}
});
<ToggleButton android:id="@+id/togglebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="Vibrate on"
android:textOff="Vibrate off"/>
ToggleButton togglebutton = (ToggleButton) findViewById(R.id.togglebutton);
togglebutton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
if (togglebutton.isChecked()) {
Toast.makeText(HelloFormStuff.this, "Checked", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(HelloFormStuff.this, "Not checked", Toast.LENGTH_SHORT).show();
}
}
});
Radio Button物件
Radio Button物件通常用於"單選"項目
mian.xml
<RadioGroup
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton
android:id="@+id/radio_red"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Red" />
<RadioButton
android:id="@+id/radio_blue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Blue" />
</RadioGroup>
Xxx.java
public void onCreate(Bundle savedInstanceState) {
.......
RadioButton radio_red = (RadioButton) findViewById(R.id.radio_red);
RadioButton radio_blue = (RadioButton) findViewById(R.id.radio_blue);
radio_red.setOnClickListener(radio_listener);
radio_blue.setOnClickListener(radio_listener);
}
private OnClickListener radio_listener = new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
RadioButton rb = (RadioButton) v;
// 顯示選擇項目
Toast.makeText(HelloFormStuff.this, rb.getText(), Toast.LENGTH_SHORT).show();
}
};
-------------------------------------------------------------------------------------
private RadioGroup.OnCheckedChangeListener change =
new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == mRadio1.getId()) {
Toast.makeText(radio.this, "1", Toast.LENGTH_SHORT).show();
}
if (checkedId == mRadio2.getId()) {
Toast.makeText(radio.this, "2", Toast.LENGTH_SHORT).show();
}
}
};
mian.xml
<RadioGroup
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton
android:id="@+id/radio_red"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Red" />
<RadioButton
android:id="@+id/radio_blue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Blue" />
</RadioGroup>
Xxx.java
public void onCreate(Bundle savedInstanceState) {
.......
RadioButton radio_red = (RadioButton) findViewById(R.id.radio_red);
RadioButton radio_blue = (RadioButton) findViewById(R.id.radio_blue);
radio_red.setOnClickListener(radio_listener);
radio_blue.setOnClickListener(radio_listener);
}
private OnClickListener radio_listener = new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
RadioButton rb = (RadioButton) v;
// 顯示選擇項目
Toast.makeText(HelloFormStuff.this, rb.getText(), Toast.LENGTH_SHORT).show();
}
};
-------------------------------------------------------------------------------------
private RadioGroup.OnCheckedChangeListener change =
new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == mRadio1.getId()) {
Toast.makeText(radio.this, "1", Toast.LENGTH_SHORT).show();
}
if (checkedId == mRadio2.getId()) {
Toast.makeText(radio.this, "2", Toast.LENGTH_SHORT).show();
}
}
};
CheckBox物件
CheckBox物件
通常用於設定開/關選項
checkbox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks, depending on whether it's now checked
if (((CheckBox) v).isChecked()) {
Toast.makeText(HelloFormStuff.this, "Selected", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(HelloFormStuff.this, "Not selected", Toast.LENGTH_SHORT).show();
}
}
});
通常用於設定開/關選項
checkbox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks, depending on whether it's now checked
if (((CheckBox) v).isChecked()) {
Toast.makeText(HelloFormStuff.this, "Selected", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(HelloFormStuff.this, "Not selected", Toast.LENGTH_SHORT).show();
}
}
});
2011年5月23日 星期一
Gallery物件
Gallery物件畫廊,大部分用於顯示圖片
Gallery.java
Gallery g = (Gallery) findViewById(R.id.gallery);
g.setAdapter(new ImageAdapter(this));
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
// function
}
}
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
private Integer[] mImageIds = {
R.drawable.sample01, R.drawable.sample02, R.drawable.sample03,
R.drawable.sample04, R.drawable.sample05, R.drawable.sample06,
R.drawable.sample07, R.drawable.sample08, R.drawable.sample09 };
// 建構子,當new新物件時會進到這裡做初始化的動作
public ImageAdapter(Context c) {
mContext = c;
TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = a.getResourceId(
R.styleable.HelloGallery_android_galleryItemBackground, 0);
a.recycle();
}
public int getCount() { return mImageIds.length; }
public Object getItem(int position) { return position; }
public long getItemId(int position) { return position; }
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mImageIds[position]);
i.setLayoutParams(new Gallery.LayoutParams(320, 480));
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
values的資料夾下新增HelloGallery的style
attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="HelloGallery">
<attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
Gallery.java
Gallery g = (Gallery) findViewById(R.id.gallery);
g.setAdapter(new ImageAdapter(this));
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
// function
}
}
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
private Integer[] mImageIds = {
R.drawable.sample01, R.drawable.sample02, R.drawable.sample03,
R.drawable.sample04, R.drawable.sample05, R.drawable.sample06,
R.drawable.sample07, R.drawable.sample08, R.drawable.sample09 };
// 建構子,當new新物件時會進到這裡做初始化的動作
public ImageAdapter(Context c) {
mContext = c;
TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = a.getResourceId(
R.styleable.HelloGallery_android_galleryItemBackground, 0);
a.recycle();
}
public int getCount() { return mImageIds.length; }
public Object getItem(int position) { return position; }
public long getItemId(int position) { return position; }
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mImageIds[position]);
i.setLayoutParams(new Gallery.LayoutParams(320, 480));
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
values的資料夾下新增HelloGallery的style
attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="HelloGallery">
<attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
2011年4月18日 星期一
ProgressBar物件
ProgressBar物件
進度條,寫在Handler 裡更新狀態,參考如下
public class progressbar extends Activity {
ProgressBar myProgressBar;
int myProgress = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myProgressBar = (ProgressBar)findViewById(R.id.progressbar);
myProgressBar.setProgress(myProgress);
// 開啟另一個執行緒,每0.1秒鐘送出一個訊息
new Thread( new Runnable() {
public void run() {
while(myProgress<100){
try{
myHandle.sendMessage(myHandle.obtainMessage());
Thread.sleep(100);
}
catch(Throwable t){
}
}
}
}).start();
}
// 每進來一次,增加一百分比
Handler myHandle = new Handler(){
public void handleMessage(Message msg) {
myProgress++;
myProgressBar.setProgress(myProgress);
}
};
}
進度條,寫在Handler 裡更新狀態,參考如下
public class progressbar extends Activity {
ProgressBar myProgressBar;
int myProgress = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myProgressBar = (ProgressBar)findViewById(R.id.progressbar);
myProgressBar.setProgress(myProgress);
// 開啟另一個執行緒,每0.1秒鐘送出一個訊息
new Thread( new Runnable() {
public void run() {
while(myProgress<100){
try{
myHandle.sendMessage(myHandle.obtainMessage());
Thread.sleep(100);
}
catch(Throwable t){
}
}
}
}).start();
}
// 每進來一次,增加一百分比
Handler myHandle = new Handler(){
public void handleMessage(Message msg) {
myProgress++;
myProgressBar.setProgress(myProgress);
}
};
}
2011年4月15日 星期五
MediaPlayer物件
MediaPlayer物件
Audio Play
使用MediaPlayer物件撥放聲音,可以從不同的來源設定,其使用的方式也不相同。
1. 本地端(包含在APK裡的檔案)
private MediaPlayer mediaPlayer = null;
// Start Play Audio
private OnClickListener start = new OnClickListener() {
public void onClick(View v) {
// 直接從本地端讀取音源檔
mediaPlayer = MediaPlayer.create(AudioPlay.this, R.raw.test);
try {
mediaPlayer.start();
} catch (IllegalStateException e) {
e.printStackTrace();
}
btn_start.setEnabled(false);
btn_stop.setEnabled(true);
}
};
// Stop Play Audio
private OnClickListener stop = new OnClickListener() {
public void onClick(View v) {
mediaPlayer.stop();
// 結束時把控制全釋放,避免占用資源
mediaPlayer.release();
mediaPlayer = null;
btn_start.setEnabled(true);
btn_stop.setEnabled(false);
}
};
// 銷毀,當不正常結束的情形發生時的處理動作
public void onDestroy() {
super.onDestroy();
// 避免物件為"空"時,使用屬性發生錯誤
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
2. 外部裝置或路徑
// Use sd card resource
bplay.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
try {
mp.setDataSource("/sdcard/Christina - Fighter.mp3");
mp.prepare();
mp.start();
bmsg.setText("Playing...");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
Video Play
撥放影音需用到SurfaceView物件
main.xml <SurfaceView
android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
Xxx.java
private MediaPlayer mMediaPlayer;
private SurfaceView mPreview;
private SurfaceHolder holder;
// 初始化,並設定holder
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
// 初始化及設定MediaPlayer物件
private void playVideo() {
doCleanUp();
try {
path = "/sdcard/test.mp4";
// Create a new media player and set the listeners
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(path);
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
catch (Exception e) {
}
}
// Called to update status in buffering a media stream(非必要)
public void onBufferingUpdate(MediaPlayer arg0, int percent) { }
// 當影片播放結束,進入onCompletion狀態(非必要)
// 若是要重複播放,可以參考下列流程控制
// 或是在playVideo加入"mMediaPlayer.setLooping(true)"
public void onCompletion(MediaPlayer arg0) {
mMediaPlayer.stop();
try {
mMediaPlayer.prepare();
}
catch (IllegalStateException e) { }
catch (IOException e) { }
mMediaPlayer.start();
}
// 讀取影片畫面大小
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
if (width == 0 || height == 0) {
return;
}
mIsVideoSizeKnown = true;
mVideoWidth = width;
mVideoHeight = height;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
// 準備狀態
public void onPrepared(MediaPlayer mediaplayer) {
mIsVideoReadyToBePlayed = true;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
// for "SurfaceHolder.Callback" use
public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) { }
public void surfaceDestroyed(SurfaceHolder surfaceholder) { }
public void surfaceCreated(SurfaceHolder holder) {
playVideo();
}
protected void onDestroy() {
super.onDestroy();
releaseMediaPlayer();
doCleanUp();
}
private void releaseMediaPlayer() {
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
private void doCleanUp() {
mVideoWidth = 0;
mVideoHeight = 0;
mIsVideoReadyToBePlayed = false;
mIsVideoSizeKnown = false;
}
// strat to play
private void startVideoPlayback() {
holder.setFixedSize(mVideoWidth, mVideoHeight);
mMediaPlayer.start();
}
Audio Play
使用MediaPlayer物件撥放聲音,可以從不同的來源設定,其使用的方式也不相同。
1. 本地端(包含在APK裡的檔案)
private MediaPlayer mediaPlayer = null;
// Start Play Audio
private OnClickListener start = new OnClickListener() {
public void onClick(View v) {
// 直接從本地端讀取音源檔
mediaPlayer = MediaPlayer.create(AudioPlay.this, R.raw.test);
try {
mediaPlayer.start();
} catch (IllegalStateException e) {
e.printStackTrace();
}
btn_start.setEnabled(false);
btn_stop.setEnabled(true);
}
};
// Stop Play Audio
private OnClickListener stop = new OnClickListener() {
public void onClick(View v) {
mediaPlayer.stop();
// 結束時把控制全釋放,避免占用資源
mediaPlayer.release();
mediaPlayer = null;
btn_start.setEnabled(true);
btn_stop.setEnabled(false);
}
};
// 銷毀,當不正常結束的情形發生時的處理動作
public void onDestroy() {
super.onDestroy();
// 避免物件為"空"時,使用屬性發生錯誤
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
2. 外部裝置或路徑
// Use sd card resource
bplay.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
try {
mp.setDataSource("/sdcard/Christina - Fighter.mp3");
mp.prepare();
mp.start();
bmsg.setText("Playing...");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
Video Play
撥放影音需用到SurfaceView物件
main.xml <SurfaceView
android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
Xxx.java
private MediaPlayer mMediaPlayer;
private SurfaceView mPreview;
private SurfaceHolder holder;
// 初始化,並設定holder
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
// 初始化及設定MediaPlayer物件
private void playVideo() {
doCleanUp();
try {
path = "/sdcard/test.mp4";
// Create a new media player and set the listeners
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(path);
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
catch (Exception e) {
}
}
// Called to update status in buffering a media stream(非必要)
public void onBufferingUpdate(MediaPlayer arg0, int percent) { }
// 當影片播放結束,進入onCompletion狀態(非必要)
// 若是要重複播放,可以參考下列流程控制
// 或是在playVideo加入"mMediaPlayer.setLooping(true)"
public void onCompletion(MediaPlayer arg0) {
mMediaPlayer.stop();
try {
mMediaPlayer.prepare();
}
catch (IllegalStateException e) { }
catch (IOException e) { }
mMediaPlayer.start();
}
// 讀取影片畫面大小
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
if (width == 0 || height == 0) {
return;
}
mIsVideoSizeKnown = true;
mVideoWidth = width;
mVideoHeight = height;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
// 準備狀態
public void onPrepared(MediaPlayer mediaplayer) {
mIsVideoReadyToBePlayed = true;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
// for "SurfaceHolder.Callback" use
public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) { }
public void surfaceDestroyed(SurfaceHolder surfaceholder) { }
public void surfaceCreated(SurfaceHolder holder) {
playVideo();
}
protected void onDestroy() {
super.onDestroy();
releaseMediaPlayer();
doCleanUp();
}
private void releaseMediaPlayer() {
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
private void doCleanUp() {
mVideoWidth = 0;
mVideoHeight = 0;
mIsVideoReadyToBePlayed = false;
mIsVideoSizeKnown = false;
}
// strat to play
private void startVideoPlayback() {
holder.setFixedSize(mVideoWidth, mVideoHeight);
mMediaPlayer.start();
}
AudioManager物件
AudioManager物件
下面介紹一些音量管理器的功能
取得音量控制器
AudioManager audioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE);
目前音量
current_volume.setText(
String.valueOf(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)));
正常模式
mode1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
});
震動模式
mode2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
}
});
靜音模式
mode3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}
});
增大音量
volume_add.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setStreamVolume(
AudioManager.STREAM_MUSIC,
audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)+1,0);
}
});
減少音量
volume_dec.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setStreamVolume(
AudioManager.STREAM_MUSIC,
audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)-1,0);
}
});
下面介紹一些音量管理器的功能
取得音量控制器
AudioManager audioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE);
目前音量
current_volume.setText(
String.valueOf(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)));
正常模式
mode1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
});
震動模式
mode2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
}
});
靜音模式
mode3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}
});
增大音量
volume_add.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setStreamVolume(
AudioManager.STREAM_MUSIC,
audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)+1,0);
}
});
減少音量
volume_dec.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioManager.setStreamVolume(
AudioManager.STREAM_MUSIC,
audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)-1,0);
}
});
2011年4月12日 星期二
EditText物件
EditText物件
編輯文字,用於資料輸入時使用
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// 當按下"Enter Key"時
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
// 在虛擬鍵盤按下"ENTER"後,隱藏虛擬鍵盤
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(
v.getApplicationWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
return true;
}
編輯文字,用於資料輸入時使用
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// 當按下"Enter Key"時
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
// 在虛擬鍵盤按下"ENTER"後,隱藏虛擬鍵盤
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(
v.getApplicationWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
return true;
}
2011年4月11日 星期一
ListView物件
ListView物件
表單,用於顯示複數以上的物件。
常見的應用例如"檔案管理","系統功能選項"。
一般的做法
// layout裡為一個TextView
adapter = new ArrayAdapter<String>(this, R.layout.device_name);
ListView lv= (ListView) findViewById(R.id.list);
// 此行程式碼會將list的資料更新
lv.setAdapter(adapter);
lv.setOnItemClickListener(select);
// 在ListView裡加入項目
adapter.add("item1");
adapter.add("item2");
adapter.add("item3");
........
private OnItemClickListener select= new OnItemClickListener() {
public void onItemClick(AdapterView<?> av, View v, int pos, long arg3) {
}
};
另一種方法,用SimpleAdapter
public void onCreate(Bundle savedInstanceState) {
..........
listview = (ListView)findViewById(R.id.list);
listview.setOnItemClickListener(listen_click);
update_list();
...........
}
private void update_list() {
SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.listitem,
new String[]{"info","img"}, new int[]{R.id.info,R.id.img});
listview.setAdapter(adapter);
}
private List<Map<String, Object>> getData() {
int i;
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
map = new HashMap<String, Object>();
map.put("info", "name");
map.put("img", R.drawable.back);
list.add(map);
return list;
}
private OnItemClickListener listen_click = new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
}
};
表單,用於顯示複數以上的物件。
常見的應用例如"檔案管理","系統功能選項"。
一般的做法
// layout裡為一個TextView
adapter = new ArrayAdapter<String>(this, R.layout.device_name);
ListView lv= (ListView) findViewById(R.id.list);
// 此行程式碼會將list的資料更新
lv.setAdapter(adapter);
lv.setOnItemClickListener(select);
// 在ListView裡加入項目
adapter.add("item1");
adapter.add("item2");
adapter.add("item3");
........
private OnItemClickListener select= new OnItemClickListener() {
public void onItemClick(AdapterView<?> av, View v, int pos, long arg3) {
}
};
另一種方法,用SimpleAdapter
public void onCreate(Bundle savedInstanceState) {
..........
listview = (ListView)findViewById(R.id.list);
listview.setOnItemClickListener(listen_click);
update_list();
...........
}
private void update_list() {
SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.listitem,
new String[]{"info","img"}, new int[]{R.id.info,R.id.img});
listview.setAdapter(adapter);
}
private List<Map<String, Object>> getData() {
int i;
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
map = new HashMap<String, Object>();
map.put("info", "name");
map.put("img", R.drawable.back);
list.add(map);
return list;
}
private OnItemClickListener listen_click = new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
}
};
Menu物件
Menu物件
選單,通常用於修改AP設定使用的物件
簡易的做法
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, ITEM1, 0, "item1");
menu.add(0, ITEM2, 0, "item2");
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case ITEM1:
break;
case ITEM2:
break;
}
return true;
}
使用resource
在res下新增menu的資料夾,加入xml檔
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game" />
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help" />
</menu>
然後在.java加入
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.new_game:
//newGame();
break;
case R.id.help:
//showHelp();
break;
default:
return super.onOptionsItemSelected(item);
break;
}
return true;
}
其他作法可參照官方網站
Dev Guide - Framework Topics - User Interface - Creating Menus
選單,通常用於修改AP設定使用的物件
簡易的做法
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, ITEM1, 0, "item1");
menu.add(0, ITEM2, 0, "item2");
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case ITEM1:
break;
case ITEM2:
break;
}
return true;
}
使用resource
在res下新增menu的資料夾,加入xml檔
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game" />
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help" />
</menu>
然後在.java加入
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.new_game:
//newGame();
break;
case R.id.help:
//showHelp();
break;
default:
return super.onOptionsItemSelected(item);
break;
}
return true;
}
其他作法可參照官方網站
Dev Guide - Framework Topics - User Interface - Creating Menus
Toast & Log物件
Toast & Log物件
Toast主要用於顯示通知訊息
Log主要是提供給debug的編寫者使用
Toast用法
Toast.makeText(Sample.this, "serivce destroy", Toast.LENGTH_LONG).show();
(LENGTH_LONG - 顯示時間長短)
Log用法
Log.d("TAG", "message");
Log.v (VERBOSE) 詳細訊息
Log.d (DEBUG) 除錯訊息
Log.i (INFO) 通知訊息
Log.w (WARN) 警告訊息
Log.e (ERROR) 錯誤訊息
Toast主要用於顯示通知訊息
Log主要是提供給debug的編寫者使用
Toast用法
Toast.makeText(Sample.this, "serivce destroy", Toast.LENGTH_LONG).show();
(LENGTH_LONG - 顯示時間長短)
Log用法
Log.d("TAG", "message");
Log.d (DEBUG) 除錯訊息
Log.i (INFO) 通知訊息
Log.w (WARN) 警告訊息
Log.e (ERROR) 錯誤訊息
2011年4月8日 星期五
Timer物件
Timer物件
可以用來排定"排程",在設定的週期裡重複執行
使用到Handler及Message物件
// 新增Timer Task
public void OnCreate (Bundle bundle) {
..........
timer = new Timer();
// 這裡的時間以毫秒(ms)為單位
timer.schedule(new mytask(), 1, 1000);
start_time = System.currentTimeMillis();
}
public void OnDestory () {
super.onDestory();
timer.cancel();
}
private class mytask extends TimerTask {
public void run() {
Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);
}
}
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
if (msg.what == 1) {
Toast.makeText(
BattService.this,
String.valueOf((System.currentTimeMillis()-start_time)/1000) + "s",
Toast.LENGTH_LONG).show();
record_log();
}
};
};
可以用來排定"排程",在設定的週期裡重複執行
使用到Handler及Message物件
// 新增Timer Task
public void OnCreate (Bundle bundle) {
..........
timer = new Timer();
// 這裡的時間以毫秒(ms)為單位
timer.schedule(new mytask(), 1, 1000);
start_time = System.currentTimeMillis();
}
public void OnDestory () {
super.onDestory();
timer.cancel();
}
private class mytask extends TimerTask {
public void run() {
Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);
}
}
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
if (msg.what == 1) {
Toast.makeText(
BattService.this,
String.valueOf((System.currentTimeMillis()-start_time)/1000) + "s",
Toast.LENGTH_LONG).show();
record_log();
}
};
};
2011年4月7日 星期四
Dialog物件
Dialog物件
Dialog物件分成4種:
AlertDialog, ProgressDialog, DatePickerDialog, TimePickerDialog
這裡只介紹最基本的AlertDialog
其他使用方式可在官網的Dev Gudie - Framework Topics - User Interface - Creating Dialogs查詢
Adding buttons
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder
.setMessage("Are you sure you want to exit?")
.setCancelable(false)
// 有setPositiveButton, setNegativeButton, setNeutralButton
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MyActivity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
Adding a list
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
Adding checkboxes and radio buttons
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
Dialog物件分成4種:
AlertDialog, ProgressDialog, DatePickerDialog, TimePickerDialog
這裡只介紹最基本的AlertDialog
其他使用方式可在官網的Dev Gudie - Framework Topics - User Interface - Creating Dialogs查詢
Adding buttons
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder
.setMessage("Are you sure you want to exit?")
.setCancelable(false)
// 有setPositiveButton, setNegativeButton, setNeutralButton
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MyActivity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
Adding a list
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
Adding checkboxes and radio buttons
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
2011年4月6日 星期三
Button物件
Button物件
大部分用於觸發某項功能時使用
通常會使用到OnClickListener這個事件
以OnClickListener為例,下列三種寫法都可以達成同樣的功能
1. 一般標準的寫法
// Button的宣告
btn_start = (Button)findViewById(R.id.start);
btn_start.setOnClickListener(start);
private OnClickListener start = new OnClickListener() {
public void onClick(View v) {
// function
}
};
2. 簡化的寫法
btn_start = (Button)findViewById(R.id.start);
btn_start.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// function
}
});
3. 使用implements的寫法
先在Activity implements OnClickListener
public class sample extends Activity implements OnClickListener {
.......
public void OnCreate (Bundle bundle) {
// import button id
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn3 = (Button)findViewById(R.id.button3);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
}
public void onClick (View v) {
if (v == btn1) {
.........
}
else if (v == btn2) {
.........
}
else if (v == btn3) {
.........
}
}
大部分用於觸發某項功能時使用
通常會使用到OnClickListener這個事件
以OnClickListener為例,下列三種寫法都可以達成同樣的功能
1. 一般標準的寫法
// Button的宣告
btn_start = (Button)findViewById(R.id.start);
btn_start.setOnClickListener(start);
private OnClickListener start = new OnClickListener() {
public void onClick(View v) {
// function
}
};
2. 簡化的寫法
btn_start = (Button)findViewById(R.id.start);
btn_start.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// function
}
});
3. 使用implements的寫法
先在Activity implements OnClickListener
public class sample extends Activity implements OnClickListener {
.......
public void OnCreate (Bundle bundle) {
// import button id
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn3 = (Button)findViewById(R.id.button3);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
}
public void onClick (View v) {
if (v == btn1) {
.........
}
else if (v == btn2) {
.........
}
else if (v == btn3) {
.........
}
}
Spinner物件
Spinner物件
下拉式選單,需要應用到ArrayAdapter物件
程式碼
private Spinner spinner;
private String[] format = new String[] {
"Item1", "Item2",
};
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, format);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(select);
private OnItemSelectedListener select = new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int pos, long arg3) {
// pos代表所選項目的位置,從0開始累加
}
public void onNothingSelected(AdapterView<?> arg0) {
}
}
另外Spinner的items也可以在main.xml裡宣告
main.xml
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/planet_prompt"
/>
String.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="planet_prompt">Choose a planet</string>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.planets_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
........
}
下拉式選單,需要應用到ArrayAdapter物件
程式碼
private Spinner spinner;
private String[] format = new String[] {
"Item1", "Item2",
};
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, format);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(select);
private OnItemSelectedListener select = new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int pos, long arg3) {
// pos代表所選項目的位置,從0開始累加
}
public void onNothingSelected(AdapterView<?> arg0) {
}
}
另外Spinner的items也可以在main.xml裡宣告
main.xml
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/planet_prompt"
/>
String.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="planet_prompt">Choose a planet</string>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.planets_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
........
}
訂閱:
文章 (Atom)