Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發教程 --- 葵花寶典第五層 控件之 Menu DatePicker TimePicker AutoCompleteTextView MultiAutoCompleteTextView

Android開發教程 --- 葵花寶典第五層 控件之 Menu DatePicker TimePicker AutoCompleteTextView MultiAutoCompleteTextView

編輯: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());

}
}

 

今天的課程就到這裡,源碼

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved