編輯:Android開發實例
Hi 大家好!
從今天起,課程中所講的控件會比前幾節復雜,功能也越強大,希望大家能將這些控件消化理解。
照例,上笑話。。
樓主:給我一個女人,我就能創造出一個民族!
回復:嗯,給你一頭母豬,明年的肉價就能下跌! :)
開始今天的課程
1 Menu
菜單控件,很實用,也很常用的一種控件,那麼運行的效果什麼樣呢?如下圖
創建Menu有三種方式
第一種 通過配置文件實現菜單效果
第二種 通過編碼方式實現菜單效果
第三種 在特定條件下動態創建菜單效果
那麼這裡我們先講解前兩種,至於第三種,後面我們做項目的時候會相信描述。
通過配置文件創建Menu
既然是通過配置文件創建,自然需要XML,首先需要在 res文件夾下創建一個menu文件夾,如下圖
在創建XML時,大家要注意一點,最好不要直接對著 menu文件夾右鍵 新建 文件 的方式,可能是由於我的環境問題,我通過這種方式老是導致Eclipse 宕掉,無響應。。大家可以試試看你們的環境是否可以,如果不可以,請用以下兩種方式來創建
第一 直接復制一個menu文件到menu文件夾下,然後打開進行修改
第二 通過 右擊menu文件夾 -> 新建 -> 其它 -> Android -> Android XML File 下一步
在彈出的窗體中,創建文件名稱,並選中Menu單選按鈕 進行創建。
新建完成後,雙擊打開menu.xml文件,進行配置,代碼如下
<?xml version="1.0" encoding="utf-8"?>
<!--
創建Menu的XML時,需要注意
1 不要直接去創建文件,然後創建一個.xml的文件,會導致Eclipse無響應
如何創建?
1 直接從外部訪問 復制文件到menu文件夾
2 menu new Other——>Android——>XML,選擇menu類型,填寫名稱
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/menuGroup1">
<item
android:id="@+id/item1"
android:title="添加"
android:icon="@drawable/add"/>
<item
android:id="@+id/item2"
android:title="修改"
android:icon="@drawable/edituser"/>
<item
android:id="@+id/item3"
android:title="刪除"
android:icon="@drawable/remove"/>
<item
android:id="@+id/item4"
android:title="關於"
android:icon="@drawable/exit"/>
</group>
</menu>
創建完配置文件後,如何與代碼關聯呢?
package TSD.Jason.Example;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
/**
* 通過配置文件實現
* @author Administrator
*
*/
public class MenuActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/**
* 創建菜單
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//將XML文件轉化成Menu對象
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.appmenu, menu);
return true;
}
/**
* 選中某項菜單事件
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
break;
case R.id.item2:
break;
default:
break;
}
ShowToast("選則了" + item.getTitle());
return true;
}
private void ShowToast(String str)
{
Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
}
}
大家可以注意到是通過 onCreateOptionsMenu方法進行Menu的創建操作
並通過MenuInflater類來將menu.xml轉換成menu對象,進行操作。
onOptionsItemSelected方法是用來捕獲菜單中某項被單擊時,所要執行的功能。
當大家編寫完成後,將程序啟動起來,然後單擊模擬器右邊的功能鍵區域中的 MENU 按鈕 就能看到菜單效果
通過代碼實現
這種方式就不需要創建XML文件了,直接在編輯器中編寫代碼即可,代碼如下
package TSD.Jason.Example;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
/**
* 通過代碼生成菜單
* @author Administrator
*
*/
public class MenuActivity1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, R.string.menu1).setIcon(R.drawable.add);
menu.add(0, 2, 1, R.string.menu2);
menu.add(0, 3, 1, R.string.menu3);
menu.add(0, 4, 1, R.string.menu4);
return super.onCreateOptionsMenu(menu);
}
/**
* 選中某項菜單事件
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
break;
case 2:
break;
default:
break;
}
ShowToast("選則了" + item.getTitle());
return true;
}
private void ShowToast(String str)
{
Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
}
}
大家可以發現基本上和用XML方式沒有太大區別,唯一的區別就在onCreateOptionsMenu方法中
menu.add(0, 1, 1, R.string.menu1).setIcon(R.drawable.add);
直接使用這個方法的參數menu對象的add方法創建
第一個參數 組ID 一般我們都設置成一樣的
第二個參數 項ID 這個項ID不要重復,否則在onOptionsItemSelected方法中你將無法正確捕捉用戶點擊了哪一項
第三個參數 排序 這個就按順序設置就OK
第四個參數 要顯示的提示信息
DatePicker
這是一個日期控件,在項目中可能會有一些需求是需要通過用戶去選擇日期的,那麼通過這個控件我們可以很好的和用戶進行交互,並獲取到用戶選擇的日期,進行下一步操作,運行效果如下圖
TimePicker
時間控件 和上邊的DatePicker所要表達的意思是一樣的,用戶可以選擇時間,運行效果如下圖
代碼如下
package TSD.Jason.Example;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
/**
* DatePicker
重要方法
getDayOfMonth():獲取當前Day
getMonth():獲取當前月
getYear()獲取當前年
updateDate(int year, int monthOfYear, int dayOfMonth):更新日期
*
*
*
* TimePicker 重要方法
*
setCurrentMinute(Integer currentMinute)設置當前時間的分鐘
getCurrentMinute()獲取當前時間的分鐘
setEnabled(boolean enabled)設置當前視圖是否可以編輯。
m_TimePicker.setIs24HourView(true);設置為24小時制顯示
setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)當時間改變時調用
* @author Administrator
*
*/
public class DataActivity extends Activity {
TextView m_TextView;
//聲明DatePicker對象
DatePicker m_DatePicker;
//聲明TimePicker對象
TimePicker m_TimePicker;
Button m_dpButton;
Button m_tpButton;
//java中的日歷類
Calendar c;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.date);
c=Calendar.getInstance(); //獲得當前日期
m_TextView= (TextView) findViewById(R.id.TextView01);
m_dpButton = (Button)findViewById(R.id.button1);
m_tpButton = (Button)findViewById(R.id.button2);
//獲取DatePicker對象
m_DatePicker = (DatePicker) findViewById(R.id.DatePicker01);
//將日歷初始化為當前系統時間,並設置其事件監聽
m_DatePicker.init(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
DisplayShow("年:" + year + " 月:" + monthOfYear + " 日:" + dayOfMonth);
}
});
//獲取TimePicker對象
m_TimePicker = (TimePicker) findViewById(R.id.TimePicker01);
//設置為24小時制顯示
m_TimePicker.setIs24HourView(true);
//監聽時間改變
m_TimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute)
{
DisplayShow("時:" + hourOfDay +" 分:"+ minute);
}
});
m_dpButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v)
{
//創建、顯示日期對話框
new DatePickerDialog(DataActivity.this,
new DatePickerDialog.OnDateSetListener()
{
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
//當日期更改時,在這裡處理
//m_DatePicker.updateDate(year, monthOfYear, dayOfMonth);
DisplayShow("年:" + year + " 月:" + monthOfYear + " 日:" + dayOfMonth);
}
},c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();
}
});
m_tpButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
//創建、顯示時間對話框
new TimePickerDialog(DataActivity.this,
new TimePickerDialog.OnTimeSetListener()
{
public void onTimeSet(TimePicker view, int hourOfDay,int minute)
{
//時間改變時處理
//m_TimePicker.setCurrentHour(hourOfDay);
//m_TimePicker.setCurrentMinute(minute);
DisplayShow("時:" + hourOfDay +" 分:"+ minute);
}
},c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true).show();
}
});
}
private void DisplayShow(String str)
{
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
}
AutoCompleteTextView
智能提示 類似與百度的輸入框,輸入關鍵字後,跳出和此關鍵字匹配的數據 此控件只能匹配一次操作,運行如下圖
當數據源中有匹配項時,就會彈出和輸入的字符所匹配的數據,用戶可以進行選擇,並且可以繼續輸入
例如 當輸入 ab 時,會提示上圖所顯示的這些項,當選擇了abcde這項時,AutoCompleteTextView 輸入框中則會顯示abcde,當再次輸入f時,會繼續匹配abcdef這些字符。
MultiAutoCompleteTextView
和上邊的AutoCompleteTextView 類似,區別在於它可以多次輸入,選擇,每次選擇後,會以逗號分隔。效果如下
當選擇了abcde時
大家通過上邊的效果圖就能明白,此控件是可以進行多次輸入 選擇的 ,只不過每次選擇後,都會生出一個逗號,並且可以再次輸入 選擇
布局代碼如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:scrollbars="vertical">
<AutoCompleteTextView
android:id="@+id/AutoCompleteTextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionThreshold="3"
>
<!-- android:completionThreshold 設置最少輸入幾個字符進行提示 -->
</AutoCompleteTextView>
<MultiAutoCompleteTextView
android:id="@+id/MultiAutoCompleteTextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</MultiAutoCompleteTextView>
</LinearLayout>
Java代碼
package TSD.Jason.Example;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.MultiAutoCompleteTextView;
/**
* 提供了2種智能提示控件 AutoCompleteTextView 和 MultiAutoCompleteTextView 區別
* AutoCompleteTextView 只能在文本框中查詢一次 MultiAutoCompleteTextView 可以匹配多次,每次之前都用逗號分隔
*
* 默認最少2個字符進行提示 方法 setThreshold(2) 設置最少輸入幾個字符進行提示
*
* @author Administrator
*
*/
public class AutoCompleteAndMultiAuto extends Activity {
private static final String[] autoString = new String[] { "a2", "abf",
"abe", "abcde", "abc2", "abcd3", "abcde2", "abc2", "abcd2",
"abcde2" };
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.autocomplete);
// 關聯關鍵字
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, autoString);
AutoCompleteTextView m_AutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.AutoCompleteTextView01);
// 將adapter添加到AutoCompleteTextView中
m_AutoCompleteTextView.setAdapter(adapter);
// /////////////////
MultiAutoCompleteTextView mm_AutoCompleteTextView = (MultiAutoCompleteTextView) findViewById(R.id.MultiAutoCompleteTextView01);
// 將adapter添加到AutoCompleteTextView中
mm_AutoCompleteTextView.setAdapter(adapter);
mm_AutoCompleteTextView
.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
}
}
今天的課程就到這裡,源碼
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
在手機衛士之前的版本升級的對話框中: 有的用戶暫時不想更新,沒有點擊“稍後再說”,而是選擇點擊回退按鍵,那麼這時候的邏輯應
前言 Content Provider為存儲數據和獲取數據提