Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發教程 --- 葵花寶典第四層 控件之 Toast Spinner RadioButton

Android開發教程 --- 葵花寶典第四層 控件之 Toast Spinner RadioButton

編輯:Android開發實例

Hi 大家好!

    今天繼續我們的控件學習,今天主要學習3種控件

  1 Toast -- 提示信息 (這種提示是不能獲取到焦點,並且會在一定時間內消失,類似與Windows軟件中的氣泡消息)

  2 Spinner --- 下拉菜單 (這個就不用解釋了吧。。)

  3 RadioButton --- 單選按鈕 (同上)

  那麼,課程開始之前,同樣是先上笑話。。

  診所門前坐著3個小孩——大男孩、小男孩、女孩。 護士問:小朋友,哪兒不舒服? 大男孩:我吞下了一個玻璃球。 護士問另一個:你呢?

   女孩:那玻璃球是我的。 護士又問:哪你呢? 小男孩:接下來是我玩! :)

  首先是Toast,先來看看運行起來默認的效果,如下圖

  

這種效果還是比較常用的,其實Toast有5種不同的實現效果,本人覺得有3種比較常用,在這裡我主要講3種不同類型的Toast,分別是 默認效果、自定義位置效果、帶圖片效果。貼上代碼,代碼中都有詳細注釋

package TSD.Jason.Example;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

public class ToastActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.toast);
}

/* 屏幕觸點事件
*該方法並不只處理一種事件,一般情況下以下三種情況的事件全部由onTouchEvent方法處理,
*只是三種情況中的動作值不同。
*
*屏幕被按下:當屏幕被按下時,會自動調用該方法來處理事件,此時MotionEvent.getAction()
*的值為MotionEvent.ACTION_DOWN,如果在應用程序中需要處理屏幕被按下的事件,
*只需重新該回調方法,然後在方法中進行動作的判斷即可。
*
*屏幕被抬起:當觸控筆離開屏幕時觸發的事件,該事件同樣需要onTouchEvent方法來捕捉,然後在方法中進行動作判斷。
*當MotionEvent.getAction()的值為MotionEvent.ACTION_UP時,表示是屏幕被抬起的事件。
*
*在屏幕中拖動:該方法還負責處理觸控筆在屏幕上滑動的事件,同樣是調用MotionEvent.getAction()
*方法來判斷動作值是否為MotionEvent.ACTION_MOVE再進行處理。
*
*
*
* event.getAction() //獲取觸控動作比如ACTION_DOWN

 * event.getPointerCount(); //獲取觸控點的數量,比如2則可能是兩個手指同時按壓屏幕

  event.getPointerId(nID); //對於每個觸控的點的細節,我們可以通過一個循環執行getPointerId方法獲取索引

  event.getX(nID); //獲取第nID個觸控點的x位置

  event.getY(nID); //獲取第nID個點觸控的y位置

  event.getPressure(nID); //LCD可以感應出用戶的手指壓力,當然具體的級別由驅動和物理硬件決定的

  event.getDownTime() //按下開始時間

  event.getEventTime() // 事件結束時間

  event.getEventTime()-event.getDownTime()); //總共按下時花費時間

Toast.LENGTH_SHORT 較短時間
Toast.LENGTH_LONG 較長時間
*
* */
@Override
public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
System.out.println("用戶按下");
break;
case MotionEvent.ACTION_UP:
System.out.println("用戶抬起");
break;
case MotionEvent.ACTION_MOVE:
System.out.println("用戶移動");
break;
}
Toast.makeText(this,"Toast 的使用方式:點擊的X軸為:"+ event.getX() + " 點擊的Y軸為:" + event.getY(),
Toast.LENGTH_SHORT).show();
return true;
}

/**
* 自定義Toast顯示位置
*/
private void ShowToast()
{
Toast toast = Toast.makeText(this,"Toast自定義的顯示位置",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}

/**
* 自定義帶圖片的Toast
*/
private void ShowImgToast()
{
Toast toast = Toast.makeText(getApplicationContext(),
"帶圖片的Toast", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout toastView = (LinearLayout) toast.getView();
ImageView imageCodeProject = new ImageView(getApplicationContext());
imageCodeProject.setImageResource(R.drawable.icon);
toastView.addView(imageCodeProject, 0);
toast.show();
}
}

自定義位置效果運行如下圖:

 

toast.setGravity(Gravity.CENTER, 0, 0); setGravity方法中

第一個參數是將Toast顯示在什麼方位,這裡是居住

第二個參數 設置X軸的偏移量

第三個參數 設置Y軸的偏移量

大家可以動手修改下參數,然後運行看看效果。

帶圖片的Toast,運行效果如下圖

我們代碼中用到了一個事件,叫做 onTouchEvent() ,這個事件主要是用來捕獲用戶觸摸屏幕的操作

這些標注出來的地方我在代碼中已經詳細注釋了,希望大家認真思考,弄明白。

Spinner

  下拉控件在Web頁面中使用的頻率大家有目共睹,是一個非常重要的控件。那麼在Android中,它張什麼樣子呢?如下圖

代碼及注釋如下

package TSD.Jason.Example;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class SpinnerActivity extends Activity {
private static final String[] m_types = {"A型","B型","AB型","0型","其他"};
private Spinner m_Spinner;
private ArrayAdapter<String>adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.spinner);
m_Spinner = (Spinner)this.findViewById(R.id.spinner1);

//將可選內容與ArrayAdapter連接
//第二個參數表示spinner沒有展開前的UI類型
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, m_types);

//設置下拉列表風格 第1種 simple_spinner_dropdown_item 第2種 simple_spinner_item
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
m_Spinner.setAdapter(adapter);

//設置下拉列表選中項監聽事件
m_Spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
/*
* 第一個參數 是適配器 <?>是適配器裡內容的類型,可把?改成你存的類型。
* 第二個參數 是你當前選擇的view
* 第三個參數 是你所選項在適配器中的索引位置
* 第四個參數 選定項目的行數
*/
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
System.out.println(arg2);
System.out.println(arg3);
Toast.makeText(getApplicationContext(), "你選中的是" +m_types[arg2], Toast.LENGTH_SHORT).show();
}

//沒選中或什麼都不選時調用
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}

});

}
}

下拉菜單控件還是比較簡單的,這裡就不在過多介紹了

RadioButton

  單選按鈕大家應該不陌生吧,它在Android中是什麼樣呢?其實剛才在下拉菜單中大家已經看到了它的樣子,上圖

 

先看看布局文件中是如何定義的

<?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"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Android底層是基於什麼系統?"
/>
<RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content">
<RadioButton android:text="@string/rad1Txt" android:id="@+id/radio0"
android:layout_height="wrap_content"
android:layout_width="wrap_content" ></RadioButton>
<RadioButton android:text="@string/rad2Txt" android:id="@+id/radio1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"></RadioButton>
<RadioButton android:text="@string/rad3Txt" android:id="@+id/radio2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"></RadioButton>
<RadioButton android:text="@string/rad4Txt" android:id="@+id/radio3"
android:layout_height="wrap_content"
android:layout_width="wrap_content"></RadioButton>
</RadioGroup>

</LinearLayout>

大家注意到了嗎?在RadioButton外邊還嵌套了一層RadioGroup?

大家回憶一下在HTML中我們如何定義一組單選按鈕呢? 是不是要通過一個叫做name的屬性。將name設置為同一個名字,那麼這些相同name的就在一個組中了,從而實現單選按鈕效果,那麼這個RadioGroup其實也類似與name屬性,將一些單選按鈕包裹成一組。

 

package TSD.Jason.Example;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class radiobuttonActivity extends Activity {
RadioGroup m_RadioGroup;
RadioButton m_Radio1, m_Radio2, m_Radio3, m_Radio4;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.radiobutton);
m_RadioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
m_Radio1 = (RadioButton) findViewById(R.id.radio0);
m_Radio2 = (RadioButton) findViewById(R.id.radio1);
m_Radio3 = (RadioButton) findViewById(R.id.radio2);
m_Radio4 = (RadioButton) findViewById(R.id.radio3);

/* 設置事件監聽 */
m_RadioGroup
.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
if (checkedId == m_Radio2.getId()) {
DisplayToast("正確答案:" + m_Radio2.getText()
+ ",恭喜你,回答正確!");
} else {
DisplayToast("請注意,回答錯誤!");
}
}
});
}

/* 顯示Toast */
public void DisplayToast(String str) {
Toast toast = Toast.makeText(this, str, Toast.LENGTH_LONG);
// 設置toast顯示的位置
toast.setGravity(Gravity.TOP, 0, 220);
// 顯示該Toast
toast.show();
}
}

 

今天就先講到這裡,希望大家動手去練習,熟練使用它們。

源碼

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