搜尋此網誌

2012年11月29日 星期四

Android 提示訊息視窗 Dialog 用法

我們在使用 Android 的時候會有一些狀況是需要提醒使用者,或是要讓使用者可以選擇"是"、"否"以及"取消"等動作。這時我們就會用到Dialog了。

使用Dialog 基本上分為幾個部分
1.初始化Dialog物件
2.設定內容
3.設定選項(是、否、取消)會進行的動作
4.show();
 AlertDialog.Builder dialog = new AlertDialog.Builder(this);
上面這段就是初始化一個物件名稱為 dialog 的 AlertDialog 物件
dialog.setTitle("Title"); //設定dialog 的title顯示內容
dialog.setIcon(android.R.drawable.ic_dialog_alert);//設定dialog 的ICON
dialog.setCancelable(false); //關閉 Android 系統的主要功能鍵(menu,home等...)
上面就是設定 dialog 的方式
dialog.setPositiveButton("收到!", new DialogInterface.OnClickListener() {  
    public void onClick(DialogInterface dialog, int which) {  
      // 按下"收到"以後要做的事情
    }  
}); 
緊接在後面接上按鈕的設定以及動作內容,不過在這邊我們是設定啥事都沒做就是了
dialog.show();
顯示出來,這樣就是一個基本的模型了!


如同上面說的 Dialog 提供了三種回應的狀態按鈕,分別是是、否、取消。這時候我們只要在設定dialog.setPositiveButton的地方在後面繼續加上 dialog.setNegativeButton 、 dialog.setNeutralButton 就行了


        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setTitle("Title");
        dialog.setMessage("INFO");
        dialog.setIcon(android.R.drawable.ic_dialog_alert);
        dialog.setCancelable(false);  
        dialog.setPositiveButton("正", new DialogInterface.OnClickListener() {  
            public void onClick(DialogInterface dialog, int which) {  
                // 按下PositiveButton要做的事  
             Toast.makeText(MainActivity.this, "收到", Toast.LENGTH_SHORT).show();
            }  
        }); 
        dialog.setNegativeButton("負", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "丟掉", Toast.LENGTH_SHORT).show();
   }
  });
        dialog.setNeutralButton("中性", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_LONG).show();
   }
  });
        
        dialog.show();

加速 Android 模擬器的啟動速度

大家在使用 Android 的模擬器時應該都會遇到一個很討人厭的問題就是"速度",尤其是開機的速度簡直就是該死的慢。光是等個開機就要等個好幾分鐘。其實這是有辦法解決的,我們只要在 Snapshot 設定成 Enabled 就可以搂

這個功能有點類似把關掉前的最後動作做系統快照,下次打開時就會直接由這個地方開始執行(略過開機的部分)這樣就可以快很多。

圖解:

2012年11月27日 星期二

Android Intent 意圖轉換

通常我們的程式不會在同一個 Activity 中完成,當我們要去啟動其他的 Activity 時就會用到 Intent(意圖) 這個東西。

在開始 Intent 的實驗之前,我們要先讓我們的專案擁有兩個 Activity 這樣我們才可以利用 Intent 進行 Activity 的轉換動作。

按照下圖的做法:
1.建立一個新的Activity



2.設定Activity的名稱



接下來我們只要設定意圖的動作
假設我們要設定由 MainActivity 點選後會換到 Activity2  這時我們這樣做:
Intent intent = new Intent(MainActivity.this,Activity2.class);
startActivity(intent);

有看到嗎?上面的設定其實就是說 intent 將要由 MainActivity 跳轉到 Activity2 的 class 中,當然 Activity2 中要幹嘛就請自己到 Activity2.java 和他所屬的 layout 檔案中去設定啦!
不過正常來說,我們單純轉換Intent是比較少見的(首頁選單嗎?)通常我們還會加上一些參數傳遞給下一個Activity運算,因此我們就要再來介紹一下Android的參數傳遞方式 Bundle

Android Toast 提示訊息用法

Toast 是在畫面上面直接跳出訊息的方式,一般的用法為

Toast.makeText(目標,訊息內容,訊息格式).show();

例如最簡單的方式如下:
Toast.makeText(this,"訊息",Toast.LENGTH_SHORT).show();


Toast 其實不是只有單純最底下顯示純文字一個方式而已,還有很多的顯示方式,不過因為暫時不常用到就先跳過吧!



有的時候會出現錯誤訊息
The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (new View.OnClickListener(){}
這時請試試看把目標寫的詳盡一點,例如說:
本來的 this 寫成 MainActivity.this 也就是告訴他說是在這個Activity裡面,因為有可能我們寫的地方取得的 this 不是Activity本身。



相關連結:
android Toast大全(五种情形)建立属于你自己的Toast

Android 資訊傳遞 Bundle 用法

在開始之前我們要先看一下意圖 Intent 的轉換操作,在上篇中我們單純解釋如何轉換不同的 Activity 。但是我們在轉換 Activity 時需要傳遞一些參數資訊到下一個 Activity 中時,我們就需要使用到 Bundle 這個方式。

Bundle 包括幾個動作流程:
送出:
1.建立 bundle
2.設定 bundle 內容
3.將 bundle 交給 intent 傳遞
接收:
1.接收 bundle
2.取得 bundle 內容

來看一下實際的範例吧!
送出:
Intent intent = new Intent(MainActivity.this,Activity2.class);
     Bundle bundle = new Bundle();
     bundle.putString("key", c);
     intent.putExtras(bundle);
startActivity(intent);
接收:
Bundle bundle = this.getIntent().getExtras();
c =  bundle.getString("key");


java 對於變數的型態是非常嚴格的,因此在我們建立 bundle 內容時,就必須要先宣告好他是 String 或是 Int。而接收時就要按照對應的方式進行接收。
例如:
bundle.putString 對應到 bundle.getString()
bundle.putInt 對應到 bundle.getInt()
bundle 可以容納多組的變數內容,只需要重複宣告 put 的內容就可以了
例如:
Bundle bundle = new Bundle();
bundle.putString("key", c);
bundle.putInt("key2", c2);
intent.putExtras(bundle);
就可以傳遞 key 和 key2 兩組參數給下一個 Intent

2012年11月26日 星期一

Android Button 用法

先建立一個名為 btn1 的 button
為了可以看到演示的效果我們再加上一個EditText的物件名為editText1

接下來我們在activity裡面編輯如下
public class MainActivity extends Activity {
 
    protected Editable c;

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button btn1 = (Button) findViewById(R.id.btn1);
        btn1.setOnClickListener(new View.OnClickListener() {
   
   public void onClick(View v) {
    // TODO Auto-generated method stub
    EditText txtC = (EditText) findViewById(R.id.editText1);
    c = txtC.getText();
    Toast.makeText(MainActivity.this, c, Toast.LENGTH_SHORT).show();
   }
  });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

上面的範例做到幾件事:
1.宣告btn1為一個 button物件
2.將 editText1 宣告為一個 名為 txtC 的 EditText 物件
3.將  txtC 中輸入的文字寫入 c 這個變數中
4.利用 Toast 將 c 印出來